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>

といった感じの書き換えがされるんだよね。きっと。あまり気にしないで先に行きましょう(汗。