【问题标题】:how to display h:panelGroup based on a condition如何根据条件显示 h:panelGroup
【发布时间】:2013-07-10 18:18:24
【问题描述】:

在我的问题中,我必须根据条件显示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

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

【问题讨论】:

  • 这个link 会帮助你。
  • 但是如何在我的场景中使用渲染属性.. 不起作用..我应该只检查这个 h:panelGroup..而不是整个表单的条件。请提出建议。
  • &lt;c:if&gt; 条件移动到&lt;h:panelGroup&gt;rendered 属性内
  • 如果distTypeName 是一个枚举或字符串,那么到目前为止发布的代码在考虑独立时是完全合法的(例如,当这是&lt;h:body&gt; 的唯一内容时)。代码实际上不是在&lt;ui:repeat&gt;&lt;h:dataTable&gt; 左右吗?如果是这样,那么这个问题重复了stackoverflow.com/questions/3442380/… 请在您以后的问题中考虑到这一点(到目前为止发布的代码在解释为&lt;h:body&gt; 的唯一内容时应该会重现该问题)。另见stackoverflow.com/tags/jsf/info

标签: jsf jsf-2 jstl


【解决方案1】:

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

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

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

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

<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

【讨论】:

  • 这可能不是原因。到目前为止,OP 发布的代码是完全合法的。如果到目前为止发布的代码实际上是在诸如&lt;ui:repeat&gt;&lt;h:dataTable&gt; 之类的JSF 转发器组件内,这只会导致问题,但问题中没有任何内容表明这一点。 bean 名称 #{program} 已经是一个很大的暗示,它代表一个实体而不是支持 bean。
猜你喜欢
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多