makotan _at_ gmail dot com

解析というか推測、憶測、予想

hello.html
diconもactionも無い!って事でindex.htmlをみると、s:type="param" s:name="message" s:value="World"って書いてるのでURLのパラメータとしてmessage=Worldが渡されると・・・って事で
s:type="param"はURLのパラメータ引数を作る為のモノと
aタグの中に書いてるなぁ〜
とりあえず何故かはさておきこういう設定で実際のspanタグに囲まれた文字列をのs:value="#{message}"に置き換えるぞと
ここのmessageはURLの引数のmessageって事ね〜
helloはこれで良いか・・・次はっと足し算
add.htmlとadd.dicon,AddDto,AddLogicImpl,AddActionImpl・・・なんか名前から推測出来るモノばっかり(笑)
まぁとりあえずHTMLからで良いのかなぁ〜
S2JSFのこの特徴はformに何も書いてない事か・・・
多分type="submit" value="計算" s:action="#{addAction.calculate}"これから自動的に相手先を決めてると勝手に推測。
各項目のtype="text" s:value="#{addDto.arg1}"これがあるとdiconからAddDtoをとってきて、arg1とやりとりをすると・・・で、Validationは勝手に処理する<ここが凄いね
で、s:action="#{addAction.calculate}"があるからaddActionを探して、DTOとLogicをaddActionに設定した後、calculate()を呼びだす。
AddActionImplのcalculate()はAddLogicのcalculate(AddDto addDto)を呼びだして結果を受けとる。受け取ったらDTOにセットしてreturn null;で呼びだされたページを表示する。
addActionもaddDtoもinstance="request"なのにAddLogicImplはSingletonなのが重要そうな予感
S2JSFのHTMLの中で使われてるxxxx.yyyyってxxxxはdiconファイルに書いてる事が必須なんだ〜まぁそれはそれで便利だけど、命名に悩みそう(^^;
実装の中身はさておき、これまた単純でした。
つぎは・・・繰り返し
forEachList.html,forEachResult.html,foreach.dicon,ForEachDto
#何となく見方が判ってきた。
s:type="forEach" s:items="#{forEachDtoList}" s:var="e"ってJooと同じって言うかJSTLと同じらしい。毎度の事ながらforEachDtoListはdiconに・・・ってdiconで初期値設定してますから!
それはさておき、こういうレコード形式で表示したいときはtrをspanで囲むんだ・・・なるほどね〜
あとはリンクだしparamだし、さっきまで出てきたやつばかりなので見終わり。
リンク先のHTMLはといえば、見た感じURLのパラメータで指定してきたやつを表示するんだ!って感じで書いてるなぁ〜書き方はわかりやすくて良いね〜
ってやっぱりこの程度で終わったので次!
converter.html,converter.dicon,ConverterDto
一言で言うと、日付変換らしい
注目点は s:converter="#{inputDateTimeConverter}"これ?っていうかdiconにも何もかかれてないのに!ってやつ・・・探したらallconverter.dicon発見!
やっぱりdiconファイルに書く事らしい(笑)
たとえば金額のconverterとかも同じようにして設定出来るって事かなぁ〜
s:value="#{converterDto.aaa}" s:converter="#{outputDateTimeConverter}"はさっきと逆と・・・まぁそれ以上の解説は無理(笑)
このHTML不思議なのはformにもsubmitにも何も書いてないのにちゃんと動くんだよね〜予想は自分のHTMLに対してのsubmitで
まずconverterDto.aaaにinputDateTimeConverterで変換した値を詰め込んで、それをそのままoutputDateTimeConverterで変換して出力してると。
だからsubmit先の記述は省略可能だと。
で〜初登場(なのか?)
s:action="home" onclick="location.href='../index.html'" s:immediate="true"
これですよ!
s:action="home"はfaces-config.xmlによれば/index.htmlここを指してるからこれだけで良いんじゃないのかなぁと思いきや後ろに
onclick="location.href='../index.html'" s:immediate="true"
こんなのが入ってる・・・これは明らかにS2JSFが何かをやるぞって証拠だなぁ〜
でも実際に動かして変更して試してみたけど、意味分かりません(w
とりあえず
s:action="home" onclick="location.href='../index.html'" の二つはどちらか一つでも動いた。でもs:immediate="true"は意味不明(^^;
あとから判るかなぁ〜判ると良いなぁ〜
ってことで試行錯誤のConverterはこれで終わり。
続く・・・のか?
(追記)
おっと、もうhttp://d.hatena.ne.jp/higayasuo/20041228#1104218943解説が!相変わらずの素早い対応m(__)m
じゃあ次も後からやろうかなぁ〜
(追加)
selectonemenu.html,selectonemenu.dicon,SelectOneMenuDto
これはS2JSF上でのselectタグの使い方3連発って感じですね〜
selectでs:value="#{selectOneMenuDto.aaa}"ってやるとじどーてきに選ばれるぞと。これはちょっと楽。
s:items="#{bbbSelectItems}"ってやると表示するItemを変更出来る。んだけど、何も指定せずに表示するにはjavax.faces.model.SelectItemを使う必要がある。
独自の設定を使いたい場合はs:itemValue="deptno" s:itemLabel="dname"こういう風にやるとOK。まぁわかりやすくて良いね〜で、s:nullLabel="選択してください"っていうのは選択されてないときのラベルを指定する方法か。
ん〜なんかわかりやすすぎて何処かに落とし穴が・・・
('' ) キョロ ( '') キョロ
無いみたいなので次
順番から言うと従業員管理なんだけど、それはいまの痒みには巨大すぎるのでパス。
checkboxをやろうかと思ったけど、見た瞬間単純すぎたのでそれもパス。って事で本日は終了!