Skip to content

Lift CSS SelectorとAjax

Lift CSS SelectorとAjax published on Lift CSS SelectorとAjax へのコメントはまだありません

相変わらずボチボチLiftを触ってる。Lift 2.2 M1から入った便利な機能として、CSS Selectorがある。詳しくはWikiの該当のエントリを見てもらうとして、それとAjaxを組み合わせる方法。

■環境

Lift 2.2

■やりたい事

<form>タグを使った例はSimply Liftの4.8に載っているんだけど、普通のボタン(ajaxButton)を使いたかった。

DBのテーブルよりデータを取得して、HTMLの表にして出力。各行についているボタンをクリックすると、その行のデータに対する何らかの処理が行われるようにしたい。

結論から言うと簡単。

Continue reading Lift CSS SelectorとAjax

Scala EnumerationとLift MappedEnum

Scala EnumerationとLift MappedEnum published on Scala EnumerationとLift MappedEnum へのコメントはまだありません

■MappedEnum

LiftにはMappedEnumという型がある。型引数の1つでEnumerationの子クラスを取る。モデルクラスのフィールドにそれを指定すると、フォームではEnumerationの各要素がプルダウンで選択できるようになる。

MappedEnumのシグニチャは以下の通り。

abstract class MappedEnum[T<:Mapper[T], ENUM <: Enumeration] (val fieldOwner: T, val enum: ENUM)
extends MappedField[ENUM#Value, T] 

Continue reading Scala EnumerationとLift MappedEnum

Liftで画像表示

Liftで画像表示 published on Liftで画像表示 へのコメントはまだありません

タイトル通りだけど、<img src="foo.jpg" />とかそう言う話ではなく、DB内やファイルシステムにある画像ファイルを読み込んで、それをブラウザに出力する方法。以前、アップロードされた画像をDBに格納する方法についてエントリを書いたので、それと併せて読むといいかも。

■環境

  • Lift 2.2 (古いバージョンでも基本は一緒のはず)
  • Scala 2.8

 

Continue reading Liftで画像表示

LiftでMySQLを使う

LiftでMySQLを使う published on LiftでMySQLを使う へのコメントはまだありません

タイトル通り。検索するとLiftを使ってる人にはお馴染みの武田ソフトさんのページが出てくる。基本はそれでOKなんだけど、バージョンが違うとちょっと違うので一応メモ。

■環境

  • Scala 2.8.1
  • Lift 2.2

Continue reading LiftでMySQLを使う

Lift CRUDify でMappedDateを正しく(?)扱う

Lift CRUDify でMappedDateを正しく(?)扱う published on Lift CRUDify でMappedDateを正しく(?)扱う へのコメントはまだありません

以前ブログエントリに書いたCRUDifyは、ちょっとしたデータを作る時とかに便利。ただ、日付あるいは時刻型(MappedDate, MappedDateTime)のフィールドにうまく値が設定できなかった。MM/dd/YYYYで入力したんだけど…

で、解決方法は、文字列を日付にパースするメソッド及び日付を文字列にするメソッドをそれぞれおオーバーライドする。

object dateField extends MappedDate(this) {
import java.text.{SimpleDateFormat, ParseException}
import java.util.Date
val dateFormat = new SimpleDateFormat("yyyy/MM/dd")
override def format(d: Date): String = dateFormat.format(is)
override def parse(s: String): Box[Date] = {
try {
Full(dateFormat.parse(s))
} catch {
case e: ParseException => Empty
}
}
}

 参考にしたのはMLのやりとり(1, 2, 3

Lift のmapper関連

Lift のmapper関連 published on Lift のmapper関連 へのコメントはまだありません

自分用メモ。lift-mapper関連

行数を調べる(select count(*) from )。scaladoc

SomeModel.count

フィールドがNULLかどうかを調べる。

someModel.field.is == null

 フィールドにNULLをセットする。Stack Overflowでの似たような質問

someModel.field(Empty)

Liftでファイルアップロード

Liftでファイルアップロード published on Liftでファイルアップロード へのコメントはまだありません

Scalaで書かれたWebフレームワークであるLiftを最近結構触っている。日本語の情報はおろか、英語の情報もそれ程豊富な訳じゃないんだけど、色々調べながらってのが結構面白い。

■ファイルアップロードの基本

今回はファイルのアップロード。"Lift ファイルアップロード"で検索するとこのページが出てきた。

Shtml.fileUpload を使うとアップロードされたファイルの内容を取得できるので、それを煮るなり焼くなり。詳しくは先ほどのページを参照。あるいはExploring Liftのこの辺

Continue reading Liftでファイルアップロード

Lift CRUDify

Lift CRUDify published on Lift CRUDify へのコメントはまだありません

■LiftでCRUDするには

"lift crud"で検索すると、ご存じyuroyoroさんの以下のページが一番先頭に来る。

  • scalaのWebフレームワーク liftで遊ぶ(8) – いよいよModelでCRUDするぜ?

このエントリは2008年のものなので、情報が若干古くなってる(※)。Liftは良くも悪くも変更が多いので。

そのシリーズの(9)には以下のような事が書かれているんだけど、今のLiftにはCRUDifyなるtraitが存在する。

liftには、Railsscaffoldみたいにコマンド一発でドゥーン!とCRUDができるなんてことはありません。

※逆に言うと、かなり前からScala関連の記事を精力的に書いていてスゴいと思います。

Continue reading Lift CRUDify

LiftのSiteMap (2)

LiftのSiteMap (2) published on LiftのSiteMap (2) へのコメントはまだありません

最近またLiftをちょっと使い始めてる。以前SiteMapがわからねーって感じのエントリを書いたけど、さすがに分からないままにしておくのもまずいのでちょっと勉強した。

Boot.scalaでsitemapが以下のように定義されている。Menuをカスタマイズするにはここをいじればよい。

def sitemap = SiteMap(
Menu.i("Home") / "index" >> User.AddUserMenusAfter, // the simple way to declare a menu

一番簡単(かつそれ程間違っていない・・・はず)な説明としては、SiteMapは可変長個のMenuを引数として取る。なので、以下のようにMenuをカンマで区切って渡していけばよい。

def sitemap = SiteMap(
Menu.i("Home") / "index" >> User.AddUserMenusAfter, // the simple way to declare a menu
Menu.i("Test page") / "test" ,

 

Continue reading LiftのSiteMap (2)

sbtプロジェクトをEclipseから使う

sbtプロジェクトをEclipseから使う published on sbtプロジェクトをEclipseから使う へのコメントはまだありません

■やりたい事、sbtプロジェクト→Eclipseプロジェクト

Scalaでは標準の地位になりつつあるsbt。ただ、Javaユーザーのかなりの部分の人がEclipseを使っていると思うんだけど、そう言う人達にScalaを勧める時に「え?Eclipse使わないの?」とか言われると悲しいので、sbtのプロジェクトをEclipseを使う方法を1つ紹介。

sbtのWikiには3つの方法が紹介されているけど、それの2番。英語が読める人はこれを読めば大体分かるかな。

■環境

  • Eclipse 3.5(別に3.6でも良いと思うけど)
  • Scala plugin (当たり前だけど、お事前に入れておく必要有り)

■手順

Liftを例に取る。sbtのプロジェクト定義ファイル(LiftProject.scala)の最初の方は以下のようになってるけど、

import sbt._
class LiftProject(info: ProjectInfo) extends DefaultWebProject(info) {
val liftVersion = "2.2-RC4"

これを以下のように変える。

import sbt._
import de.element34.sbteclipsify._
class LiftProject(info: ProjectInfo) extends DefaultWebProject(info) with Eclipsify {
val liftVersion = "2.2-RC4"

 

Continue reading sbtプロジェクトをEclipseから使う