Dej*_*ell 10 jsf jstl facelets jsf-2
我在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>
Run Code Online (Sandbox Code Playgroud)
在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>
Run Code Online (Sandbox Code Playgroud)
但是,<c:if test>似乎总是评估true,如果<ui:param>没有指定.如何更改代码,以便在未指定时<c:if test>实际评估?false<ui:param>
Bal*_*usC 43
XML命名空间无效.它应该是
xmlns:c="http://java.sun.com/jsp/jstl/core"
Run Code Online (Sandbox Code Playgroud)
是的,令人惊讶的/jsp是URI中的部分!/jsp不适用于JSF 1.x的Facelets 1.x中的那个.如果您已经在Web浏览器中检查了生成的HTML输出,那么您应该注意到HTML输出中的<c:if>未解析.
也就是说,你应该更喜欢JSF组件而不是JSTL标签,除非技术上不可能(即当你真的想要控制视图的构建,而不是渲染视图时).在h:panelGroup你发现自己是一个不错的人选,但是ui:fragment是一个更好的选择,因为它具有更少的开销.
<ui:fragment rendered="#{not empty title}">
<h1>#{title}</h1>
</ui:fragment>
Run Code Online (Sandbox Code Playgroud)
请注意,由于JSF <ui:fragment>人员在初始JSF 2.0版本的标签定义文件中出现错误,Netbeans会认为标签不支持该rendered属性,但这是不正确的.它当然支持它.它已在JSF 2.1标记定义中修复.