Employee Management2-(1)
前回はemployeeSearch.htmlが表示されたところまで行ったけど、このhtmlファイルについては最後のDepartmentコンボボックス以外はスルーというかよく見ていなかったので、頭からボチボチ見ていくことにする。
まず先頭に
<html xmlns:m="http://www.seasar.org/maya" m:action="#{employeeSearchInitAction.initialize}" m:extends="/WEB-INF/layout/layout.html"> <head>
があるけど、これはこっちで見たからパス。
つぎのheadタグも特にS2JSF的な話はないと思うのでパス。
<head> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31j"/> <title>Employee Management</title> <link rel="stylesheet" type="text/css" href="../css/global.css"/> </head>
そして次のbodyタグ内部がS2JSFでいろいろ行われている部分になるのね。構造的には2つのspanタグで構成されている。
<span m:inject="f:param" m:name="layoutTitle" m:value="Employee Management"/> <span m:inject="s:insert" m:name="body"> : </span>
このspanタグって何?使ったこと無いよ。もしかしてCSSに関連したもの?と思ってぐぐってみたら
- HTMLとしては意味が無い
- 何かの範囲を決めるのに使える
- divタグに似てるけどあちらはブロック要素で、こちらはインライン
などと書かれている。つまり
- ~で囲まれた要素はそのままブラウザに表示されちゃう
- ブラウザはspanタグに属性などが書かれていても無視しちゃう
から、ある意味人畜無害なのね。でもS2JSFはそこに書かれた属性に応じていろいろな処理をしちゃうし、プレビュー機能も提供できる。なるほど。
さて本題に話を戻して最初のspanに書かれている"m:inject"。mという名前空間を指定しているのは冒頭のhtmlタグに書かれている
xmlns:m="http://www.seasar.org/maya"
これはMayaというテンプレートエンジンのことですね。詳細はこちらをどうぞ。つまり"m:inject"とはMayaで定義しているinjectタグ、ということ。で、その働きはJSPカスタムタグをHTMLテンプレートに組み込むこと。これをDIコンテナの表現に合わせてインジェクション(injection)というみたい。
最初のspanタグが取り込んでいるのはf:param。このf名前空間の定義はWEB-INF/classes/jsf.diconで次のようにされてます。つまりJSFのカスタムタグですね。
<component class="org.seasar.jsf.runtime.JsfConfigImpl"> <initMethod name="addTaglibUri"> <arg>"h"</arg> <arg>"http://java.sun.com/jsf/html"</arg> </initMethod> <initMethod name="addTaglibUri"> <arg>"f"</arg> <arg>"http://java.sun.com/jsf/core"</arg> </initMethod> <initMethod name="addTaglibUri"> <arg>"s"</arg> <arg>"http://www.seasar.org/jsf"</arg> </initMethod> </component>
そして後ろに続くm:name, m:valueは、きっとparamの属性のことなんだろうな。つまりm:injectに続くm:xxxとは、injectされたカスタムタグの属性xxxを表すのでしょう。
2005/5/19追記
higayasuoさんからコメント『HTMLに無い属性は、mプレフィックスをつけて区別してます。』
つまり
<span m:inject="f:param" m:name="layoutTitle" m:value="Employee Management"/>
というspanタグはHTML的には何の意味も持たないけど、(J2JSFとか)Mayaが組み込まれた環境ではこれを
<f:param name="layoutTitle" value="Employee Management"/>
という(JSFの)タグに変換してくれる。という解釈でOKかな?多分そうだよね。間違っていたら指摘してくださいm(..)m
で、このlayoutTitleがどこで使われるかというと、このemployeeSearch.htmlが継承しているというか、上書きするlayout.htmlの
<title m:value="#{layoutTitle}"/>
にセットされる。んー。またm(Maya)だな。でもtitleはふつーのHTMLのタグだよね。多分ここは
<title m:value="#{layoutTitle}"/> ↓ <title>m:value="#{layoutTitle}"</title> ↓ <title>Employee Management</title>
といった感じの書き換えがされるんだよね。きっと。あまり気にしないで先に行きましょう(汗。