JSF 2.0のGETサポート新コンポーネント
JSFは画面遷移は全てPOSTによるポストバック動作が標準だった。そのため「h:form」タグで囲む必要もあった。画面遷移だけのためにこれはあんまり。
そこでGETで移動しようと思った場合リンクタグ「h:outputLink」で生成することもできたが、これはナビゲーションケースを無視したもので、生成先のURLを正確に知る必要があった。もしくはbuttonを配置してscriptでlocationをセットするなどでもよいが、どちらにしろナビゲーションルールは使えずJSFを離れた動きが必要だった。
<h:outputLink value="/hoge/bar.xhtml" >barへ</h:outputLink>
JSF 2.0ではナビゲーションが使えるボタンタグとリンクタグが用意された。
<h:button outcome="bar" value="barへ"/> <br/> <h:link outcome="bar" value="barへ"/>
生成されるHTMLは以下の通り。
<?xml version='1.0' encoding='UTF-8' ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>foo</title> </head> <body><input type="button" onclick="window.location.href='/WebApplication15/faces/hoge/bar.xhtml'; return false;" value="barへ" /> <br /><a href="/WebApplication15/faces/hoge/bar.xhtml">barへ</a> </body> </html>
これまた非常にシンプルだが、GETで移動できるようになったのはうれしいところ。
GETパラメータを動的に生成してもいいのだが(そういうAPIはJSF 2.0でいろいろと追加されている)、パラメータ数が固定ならばテンプレートに記述できる。
<h:link outcome="bar" value="barへ"> <f:param name="type" value="link"/> </h:link>
という文では
http://localhost:8080/WebApplication15/faces/hoge/bar.xhtml?type=link
というURLになる。
もちろんJSFC属性も使えるため
<a jsfc="h:link" outcome="bar" >barへ</a>
もしくは
<a jsfc="h:link" outcome="bar" value="barへ" />
のように記述してもよい。
href指定は消されるので
<a jsfc="h:link" outcome="bar" href="href指定は消される">barへ</a>
のように記述しておいてもよい。これはHTMLのデザインと分離する上において大変便利だ。