如何根据条件显示h:panelGroup

时间:2013-07-10 18:18:24

标签: jsf jsf-2 jstl

在我的问题中,我必须根据条件显示h:panelGroup。对于此h:panelGroup,已设置rendered属性。

 <h:panelGroup rendered="#{not empty program.categories}">
    <li>
        <strong>Category: </strong> 
        <h:outputLabel value="#{not empty program.categories ? 'A':'N/A'}"/>
    </li>
 </h:panelGroup>

现在我试图像以下代码一样保持条件:

<c:if test="${program.distTypeName != 'X' || program.distTypeName != 'Y' || program.distTypeName != 'Z'}">

<h:panelGroup rendered="#{not empty program.categories}">
    <li>
        <strong>Category: </strong> 
        <h:outputLabel value="#{not empty program.categories ? 'A':'N/A'}" />
    </li>
</h:panelGroup>

但这不起作用。请告诉我我做错了什么。基本上,如果disType不在x,y,z中,那么我需要显示h:panelGroup

我们如何使用jstl标签测试not in条件? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

JSTL标记和JSF标记不同步。 JSTL标记在构建时运行,而JSF标记在渲染时运行。这就是为什么你会看到一个奇怪的行为。您应该使用JSF rendered属性而不是c:if

此外,char比较也与Java不同。字符在EL表达式中的行为类似于String,这意味着!=运算符无法为String比较提供正确的结果。

<c:if test="${program.distTypeName != 'X' || program.distTypeName != 'Y' || program.distTypeName != 'Z'}">

以上c:if语句可以转换为渲染属性,如

<h:panelGroup rendered="#{program.distTypeName.compareTo('X') != 0 || program.distTypeName.compareTo('Y') != 0 || program.distTypeName.compareTo('Z') != 0}">
如果distTypeNamechar,也可以在此处使用

或字符的ASCII表示。

<h:panelGroup rendered="#{program.distTypeName ne 88 || program.distTypeName ne 89 || program.distTypeName ne 90}">

相关文章

https://stackoverflow.com/a/4154930/892994