0

在我的问题中,我必须h:panelGroup根据条件进行显示。为此h:panelGrouprendered已经设置了属性。

 <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.

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

4

1 回答 1

0

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

此外,char 比较的工作方式也与 Java 不同。字符在 EL 表达式中的行为类似于字符串,这意味着!=运算符不会给出适当的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}">

distTypeName如果是.或 ASCII 字符也可以在这里使用char

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

相关帖子

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

于 2013-07-11T07:55:46.937 回答