現在の課題
日時型のマッピング
model.MappedDatetimeのformat/parseは、object LiftRulesのdateConverter(うろ覚え)を経由して、JavaのSimpleDateFormatで処理してるわけだが、date.toStringのような「日本人的には馴染みのない」形式なので、切り替えたい。
が、それが難しい。
dateConverterは値(val)であり、初期値はファクトリから受け取っているが、そのファクトリはそこでnewされている。調べる前はbootstrap.scalaの中で指定すりゃ大丈夫かなとも思ったが、ちょっと想像できない。なんかやり方はあるのかも知れないが…。
ということで、model.MappedStringをベースに、validate/format/parceを追加して自作してしまおうと計画中。簡単なものはtraitを使ってプラグイン的に追加することは出来たので、それほど困難ではない。
…って、ここまで書いてようやく気づいた。traitでoverride defして、mix-inすればいいのか。「MyMappedDatetime extends MappedDatetimeとかしなきゃいけないかな」と思い込んでいた。Java脳だ。最終的にはクラスとしてまとめたほうがいいのかも知れないが、取りあえずとしてはmix-inで行けばいいや。
外部キー参照のマッピング
ActiveRecordみたいに、Mapper同士のリレーションを定義できる。らしい。が、どこまで出来るのかまだよく調べていない。
とりあえず外部キー参照のみ定義してみたmodelに対してCRUDifyでCreateさせようと思ったが、外部キー参照の項目は編集できない形になってしまった。何かあるんだろうか、何かあるのかな。
調査が追いつかなければ(もしくは飽きたら)、ここも取りあえず適当に自作しておいて、必要であれば切り替えるようにしようと計画中。
この辺りの「よく分かんないけど自作しちゃえ」的部分は、それなりに集約させるように気をつければ、あとで方針を変えるときの労力が少ない。traitを使って段階的に構造化できるようで、とてもいい。
toForm
modelの入力フォームをベタベタで描いているので、toFormに集約。自作マッピングも。
DatePickerがchromeで動かない?
http://jqueryui.com/demos/datepicker/を取りあえず埋め込んでみたが、上手く動いていない様子。なんでだろう。優先度は低いけど、ちょっと気になる部分。Liftとは直接関係はないかもしれないが。
リクエストパラメータの扱い
取りあえずJavaServlet的な扱いしか出来ていないので、より良いやり方がないか調査。
User Role
Liftには標準でログイン機構をサポートしているわけだけど、Roleの設定もできるようなコードをどこかで見たかも知れない。そういうクラスがあったような気がするので調べる。
Quartz Scheduler
定時実行してくれるservletもあり、軽負荷サーバなので、取りあえずそれを使う方針。ただ、Scalaなんだし、Actorでもっとかっこいいことできそうで面白そうだなと思う分野。これは課題ではない。
sbt ~jetty-run
リソースのリークがあるらしく、コンパイル&再配置を繰り返すと、OutOfMemoryで落ちる。対処できると助かる。
地味なところで、::と:::
"hoge" :: List("a","b","c") List("hoge") ::: List("a","b","c")
listへの要素追加は::、list同士の連結は:::。
CRUDifyのmenusをメニューに追加するときに、10分位悩んでしまった部分。いや、正確には、途中のツイートをいれれば30分くらいだわ。
まとめ
仕事で使うと本気度が上がるから、勉強になるね。