サンプル(RC6)を動かす
とりあえずサンプルをDLして実行…問題なく動いた。ってことでちょびちょび触ってみることにする。
- まずは、Helloから
”Hello World ”って表示された。生成されたHTMLを見たらidとか凄い事になってる。JavaScriptとかでid使うとき大丈夫なんだろうかとちょと心配。まぁ方法はあるだろうということで後にしよう。ってことで、htmlファイルを見たが非常にシンプル。layoutTitleってのは例のレイアウトと関係があるのだろうか?何がどうなっているのかさっぱりわからない…
う〜む、あるタイミングでメニューを選択しても画面が切り替わらなくなる現象に遭遇する。現状の知識ではとても原因を追究することは出来そうもない。ってよく見りゃリンクがどれを選択しても同じになってる。セッションとかと関係あるのかなぁ…ん?!ってSQLException出とるがな!!メニュー適当に選んでたらDBアクセスしにいって失敗してたのね<まぁ原因わかったし良かったとしよう。
layoutを見てみるとなんとなくわかった。Tiles触ったことがあったので抵抗ないし、むしろわかりやすいかも(あの設定XMLファイルを書かないで済むのは非常に嬉しい)。つまり、
<span m:inject="f:param" m:name="layoutTitle" m:value="Hello"/>
のHelloが、
<title m:value="#{layoutTitle}">S2JSF Example</title>
の #{layoutTitle} に入る。hello.html自身にも title があったので最初は、ん?とか思ったけど、モックのときにはこっちを表示するのね。んで、
<span m:inject="s:insert" m:name="body"> Hello <span m:value="#{message}">hoge</span> </span>
が、
<span m:inject="s:insert" m:name="body"/>
に突っ込まれる。って”World”はどこからやって来るの???と思って、おもむろに”World”をテキスト検索したら、あるじゃないですかmenu.htmlに。
<a m:action="hello">Hello <span m:inject="f:param" m:name="message" m:value="World"/> </a>
なるほど、というかなんと言うかそういうことですか。んで、もう一度生成されたHTMLを見ると、
<a href="/s2jsf-example/hello/hello.html?_id28:_link_hidden_=_id28:_id34&message=World" id="_id28:_id34">Hello
てな感じでしっかり”World”を渡しているのね。ふ〜ん、”f:param”だけに…JSFも全然知らんしこのまま進めていいものか疑問はあるが、非常にとっつき易く、かつ非常に魅力的であることがこの時点でもはっきりと感じ取れるわけで、ここで止めるわけにはいきませんな。
ということで勝手に”Hello World”卒業!おっと、レイアウト使ってる場合は、
<html xmlns:m="http://www.seasar.org/maya" m:extends="/WEB-INF/layout/layout.html">
になるのね。
- そしてAddへ
さすがにここまで来るとかなり複雑…ってこともなく、でもActionが出てきた…あら単なる足し算とはいえLogicまでお出ましとは。てかこの辺はく〜す的なあれで特に問題ないな。気になるのはエラーメッセージのところか。一体エラーメッセージは誰が出しとるんじゃい!!ってきっとデフォルトのConverterとかその辺だろうと勝手に納得。
name="addDto"とname="addActin"を消してみたら案の定エラーとなった。S2Strutsのときみたいに勝手にプロパティをバインドして…とはこの場合違ったみたい。う〜ん、浅はかな自分。
なるほどメッセージリソースは、myfaces.jarの中で定義してあって、IntegerConverterクラスでチェックしてたわけね。なるほど、なるほど。でもってUIComponentのIDを{0}にぶち込むからあんなわけわからんエラーメッセージを出してくれるわけだ。
この辺の詳細はJSFの話だろうから、とりあえずこう書くってことでお茶を濁しておこう。
<span m:inject="h:messages" m:globalOnly="false" m:showDetail="true"/>
- そしてForEachへ
おぉHello/Addとインデントがなかったから見難いなぁと思っていたら、早速インデントが。へ〜、formは属性とか何にもなしなんだ(Addで気づけ)。Strutsと比べるとえらい違い。ちょっとした記述ミス/ど忘れでどんだけハマッたか…
でも、forEachResultInitActionって誰が呼んでるんだぁ〜。ってこんな風になってた。なるほど画面の初期化はこうするのか。
<html xmlns:m="http://www.seasar.org/maya" m:action="#{forEachResultInitAction.initialize}" m:extends="/WEB-INF/layout/layout.html">
- そのままForEach2
なるほどぉ。基本的にこれまでやってきたことですぐ理解できる。イベントドリブン(であってたっけか)ってのがようやっとわかってきた気がする。
ん??そのまま流すのはマズイだろ…そういえばupdateで値かわるけど、この辺てどうやってるんだ…ん〜〜どういう加減でリストに値が入って来るんだろう…全くわからん。まぁ裏でうまいことやってくれてるということでここはお茶を濁しておこう。