如何比较2个字符串与<c:if>?</c:if>

时间:2011-02-14 15:06:54

标签: java jsp jsf jstl

我正在尝试相应地向支持bean返回的String属性显示<h:outputText><h:commandLink>。 比较字符串时遇到问题.. 这是插图:

<c:if test='#{column.header ne "Details"}'>
     <h:outputText value="#{recordTable[column.property]}"/><br/>
</c:if>
<c:if test='#{column.header eq "Details"}'>
     <h:commandLink value="#{column.header}"
                    action="#{searchBean.goToWarehouse}"/><br/>
</c:if>

但是比较不起作用。这是正确的方法吗? 可以在没有<jsp:useBean....>的情况下完成:JSP sample

感谢您的帮助

1 个答案:

答案 0 :(得分:11)

您似乎在<h:dataTable>中使用此功能。仅在视图构建时间内评估JSTL标记,而不是在视图渲染时间期间评估。归结为:JSTL首先从上到下运行,然后将生成的结果交给JSF再次从上到下运行。目前,在JSF数据表中评估JSTL标记,JSTL无法使用数据表的迭代项(var属性中的项)。因此,测试结果始终为false

只需使用JSF组件的rendered属性。

<h:outputText value="#{recordTable[column.property]}" rendered="#{column.header ne 'Details'}"/>
<h:commandLink value="#{column.header}" rendered="#{column.header eq 'Details'}" action="#{searchBean.goToWarehouse}"/>
<br/>

以下是一些如何使用rendered属性的示例:

<h:someComponent rendered="#{bean.booleanValue}" />
<h:someComponent rendered="#{bean.intValue gt 10}" />
<h:someComponent rendered="#{bean.objectValue == null}" />
<h:someComponent rendered="#{bean.stringValue != 'someValue'}" />
<h:someComponent rendered="#{!empty bean.collectionValue}" />
<h:someComponent rendered="#{!bean.booleanValue and bean.intValue != 0}" />
<h:someComponent rendered="#{bean.enumValue == 'ONE' or bean.enumValue == 'TWO'}" />

与具体问题无关,Roseindia是not最好的JSF学习资源。我建议去其他资源。