我有三个值,我希望在前两个值的情况下渲染一个组件,为第三个值渲染另一个组件
下面,我有我的页面:
page.xhtml
<ui:repeat value=#{bean.value} var="data"> <c:choose> <c:when test="#{data.thirdValue == 'content'}"> <h:outputText value="Wrong value"/> </c:when> <c:otherwise> Correct! </c:otherwise> </c:choose> </ui:repeat>
这就是我的页面定义方式.我还添加了以下命名空间:xmlns:c =“http://java.sun.com/jsp/jstl/core.
我测试了测试中的值是否为< c:when>返回“true”或“false”,确实如此.
我的问题是< c:when>永远不会被评估. < c:否则>值始终呈现.我错过了什么吗?是因为条件渲染在< ui:repeat>内了什么时候不评估?
任何帮助将非常感谢.提前致谢
解决方法
你需要删除c:choose,因为正如@Jens在评论中所述,它们是在不同的阶段处理的.您可以将JSTL与JSF结合使用,但必须遵守它们的解决顺序.阅读BalusC的精美答案,他摇滚.
根据您的需要,您可以使用rendered attribute来有条件地输出文本:
<ui:repeat value="#{bean.value}" var="data"> <h:outputText rendered="#{data.thirdValue == 'content'}" value="Wrong value"/> <h:outputText rendered="#{data.thirdValue != 'content'}" value="Correct!"/> </ui:repeat>