Faceletsにコメント文を書く
FaceletsのXHTMLにコメントを書く時に少しはまったのでメモ。(以下のコードはJBossAS7.1で確認)
うまくいかない例 (HTMLコメントをそのまま使う)
コマンドボタン
<!-- うまくいかないコメント例 --> <!-- <h:commandButton styleClass="btn" action="#{userManageController.changePassword()}" value="コメント"/> -->
上記の例では、action属性に設定されたuserManageController.changePassword()が呼ばれてしまう。
生成されたHTMLを見ると、エンコードされた状態でコメントアウトはされているように見える。
<!-- うまくいかないコメント例から生成されたHTML --> <!-- <h:commandButton styleClass="btn" action=""&value="コメント"/> -->
うまくいく例(<ui:remove>の使用)
JBossSeamのFAQ*1に解決策が載ってたので、試してみた。
Faceletsでコメントアウトする場合は<ui:remove>タグで囲うとうまくいく。<ui:remove>で囲うと、生成されたHTMLページには全く表示されなくなる。(コメントとしても出力されない)
<ui:remove> <h:commandButton styleClass="btn" action="#{userManageController.changePassword()}" value="コメント"/> </ui:remove>
また、web.xmlに以下の設定を加えることで通常のHTMLコメントを使ってコメントアウトすることもできる。こちらも<ui:remove>と同様に、コメントアウトした部分はページに出てこなくなるのが特徴だ。
<context-param> <param-name>facelets.SKIP_COMMENTS</param-name> <param-value>true</param-value> </context-param>
web.xmlにfacelets.SKIP_COMMENTSを定義するやり方の方が直感的で嬉しい。
*1:http://www.seamframework.org/Documentation/HowDoICommentOutBlocksOfMarkupInFacelets