S2JSFのサンプルhello.html

menu.htmlのHelloというリンクをクリックすると

Hello World

と表示されるようなコードに見えるのだが、そうはならず

Hello

しか表示されない。

このHelloというリンクはmenu.htmlで定義されているがそこでは

<a m:action="hello">Hello
  <span m:inject="f:param" m:name="message" m:value="World"/>
</a>

となっている。http://seasar.sourceforge.jp/s2jsf.html#helloを見ると、

anchorタグの子タグでf:paramタグを指定することにより、遷移先のページへパラメータを渡すことが出来ます。

と書かれているので、Helloの遷移先として(faces-config.htmlで)定義されているhello/hello.htmlへこのmessageというパラメータが渡されるはずでは?実際hello.htmlでは

<span m:inject="s:insert" m:name="body">
Hello <span m:value="#{message}">hoge</span>
</span>

となっている。でもこのリンクをクリックしても上記のようにHelloとしか表示されない。生成されたHTMLを見ると

<a href="#" onclick="clear__5Fid29();document.forms['_id29'].elements['_id29:_link_hidden_'].value='_id29:_id35';
document.forms['_id29'].elements['message'].value='World';document.forms['_id29'].submit();
return false;" id="_id29:_id35">Hello
  
</a>

といった感じになっているので無視されてはいないようだ。その一方

http://localhost:8080/s2jsf-example/hello/hello.html?message=World

とすればHello Worldと表示される。この違いは何なんだろう。menu.htmlで設定されたWorldはどこへ行くんだろう?もしかしてリクエストの属性にnullでも設定されたmessageが存在しているのか?だとしたら遷移先にパラメータを渡す記述はなんのためにあるんだ。なんかこれも大変そうだな。