JSF 2.0でコンポーネントのHotDeploy開発
JSF 2.0の開発がスタートしたとき、目標としてコンポーネントの開発を容易にする、HotDeployできるようにするというのがあった。
最初何を言ってるのかわからなかったが実際に触ってみてやっと理解した。
いわゆるJSPやXHTMLなどでコンポーネントが開発できるようになった。そこにはTLDやJavaの面倒なコードは存在せず、コンパイルは必要ない。特定のディレクトリに配備をしておけば、JSPやXHTMLなどのテンプレートは変更があると自動的にコンパイルされるため、これをHotDeployというのだろう。
では実際にコードを書いてみる。足し算をするコンポーネントを作ってみる。
コンポーネントのコード。
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:composite="http://java.sun.com/jsf/composite" xmlns:c="http://java.sun.com/jsp/jstl/core"> <body> <!-- インターフェース定義--> <composite:interface> <composite:attribute name="count" required="true"/> </composite:interface> <!-- 実装 --> <composite:implementation> <span style="color: red"> <c:forEach begin="1" end="#{cc.attrs.count}"> ★ </c:forEach> </span> </composite:implementation> </body> </html>
これを
webルート/resources/calc/add.xhtml
という場所に保存する。
「
「
コンポーネントを利用するコード。
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://java.sun.com/jsf/composite/star"> <head> <title>おほしさま</title> </head> <body> おほしさま<br/> <s:print count="3" />/ <span jsfc="s:print" count="5" /> </body> </html>
xmlnsをみると面白い。「http://java.sun.com/jsf/composite/star」のcompositeから後ろが先ほど作成したコンポーネントのディレクトリを指す。
そして
当たり前だが、利用するところにELを使用すればJavaBeansの値を使用することができる。
<s:print count="#{HogeBean.count1}" /> <span jsfc="s:print" count="#{HogeBean.count2}" />
確かに触っていて思ったが、すごく楽。コンポーネントってのはHTMLを生成する部分なのでテンプレートで作るほうが効率がよい。しかもただのXHTMLなのでDreamWeaver等でデザインしてブラウザですぐに確認しながらさくさくいける。
複数個所で同じように使うメニューなどをJSFコンポーネント化して配備していくというのは十分ありだなぁと思った。同じようなコードを書くのはよくないことだが、デザインにもそれは言えるってこと。
つまり、HTMLをベースにしたテンプレートからさらに先を見据えての開発が重要になる。コードだけじゃなく、テンプレートもコンポーネントを意識してくれ、と。重複した部分を取り除こうというのは非常にいいと思う。
標準で用意されているドロップダウンリストのコンポーネントを使うのではなく、デザイナが用意したこぎれいなドロップダウンリストとか多機能なやつとか必要になる場面は非常に多いと思うのでこれはかなりありがたいはず。また、配布も容易だよね。