FaceletsでJSF2を使用しています。
ページで<ui:param>
を定義します。
<ui:composition template="/WEB-INF/templates/ui.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://Java.Sun.com/jsf/core"
xmlns:h="http://Java.Sun.com/jsf/html"
xmlns:ui="http://Java.Sun.com/jsf/facelets"
>
<ui:param name="title" value="OnAir WebDemo" />
...
</ui:composition>
私が持っているui.xhtml
テンプレートに:
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://Java.Sun.com/jsf/core"
xmlns:h="http://Java.Sun.com/jsf/html"
xmlns:ui="http://Java.Sun.com/jsf/facelets"
xmlns:c="http://Java.Sun.com/jstl/core"
>
<c:if test="#{not empty title}">
<h1>#{title}</h1>
</c:if>
</html>
ただし、<c:if test>
が指定されていない場合でも、<ui:param>
は常にtrue
を評価するようです。 <c:if test>
が指定されていないときに<ui:param>
が実際にfalse
を評価するように、コードを変更するにはどうすればよいですか?
XML名前空間が無効です。そのはず
xmlns:c="http://Java.Sun.com/jsp/jstl/core"
はい、驚くべきことに、URIの/jsp
部分があります! /jsp
のないものは、JSF1.xのFacelets1.xでのみ機能します。 Webブラウザで生成されたHTML出力を確認した場合は、HTML出力で<c:if>
が解析されないままになっていることにも気付くはずです。
とはいえ、技術的に不可能でない限り(つまり、実際にビューのbuildingを制御したい場合は、ビューのレンダリング)。自分でわかったh:panelGroup
は良い候補ですが、オーバーヘッドが少ないのでui:fragment
の方が適しています。
<ui:fragment rendered="#{not empty title}">
<h1>#{title}</h1>
</ui:fragment>
最初のJSF2.0バージョンの<ui:fragment>
タグ定義ファイルのJSF担当者のミスにより、Netbeansはタグがrendered
属性をサポートしていないとジャークしますが、これは正しくありません。 。それは確かにそれをサポートします。 JSF2.1タグ定義で修正されました。
上手、
代わりに、次のようにrendered
を使用しました。
<h:panelGroup rendered="#{title!=null}">
<h1>#{title}</h1>
</h:panelGroup>