Skip to content

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 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から使う

Scalaの関数定義で=を書かないと・・・

Scalaの関数定義で=を書かないと・・・ published on Scalaの関数定義で=を書かないと・・・ へのコメントはまだありません
def foo(arg: String) {
....
retval
}

なんてコードを書いていた。でも、なぜかfooを呼び出している所にretvalが返されない。以下のようにreturn文を書いても現象は変わらず。

 return retval

そこで、以下のように型を指定しようとすると

def foo(arg: String): String {
....
retval
}

以下のようなエラーが出る。

only classes can have declared but undefined members

ここでようやく気づいた。= が抜けてる…正しくは以下の通り。

def foo(arg: String): String = {
....
retval
}

分かりにくいよなぁ。最初の間違ったコードでreturn文を書いても何も文句を言われないので、間違いに気づくのに時間がかかった。

LiftのFormが勝手にAjax用に・・・

LiftのFormが勝手にAjax用に・・・ published on LiftのFormが勝手にAjax用に・・・ へのコメントはまだありません

Liftは色々便利っぽいんだけど、日本語の情報が少ない。というか英語の情報すら少ない。

つい最近はまった事。Liftのフォームで、通常通りSnippetに情報を渡して次の画面に遷移して欲しい所なのに、勝手にAjaxのフォームになってしまう。

Continue reading LiftのFormが勝手にAjax用に・・・