java - 如何比较 2 个字符串 <c :if>?

标签 java jsp jsf jstl

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

<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

感谢您的帮助

最佳答案

您似乎在 <h:dataTable> 中使用它. JSTL 标记仅在 View 构建期间进行评估,而不是在 View 呈现期间进行评估。归结起来就是:JSTL先自上而下运行,然后把产生的结果交给JSF再自上而下运行。目前 JSTL 标记在 JSF 数据表中进行评估,数据表的迭代项(var 属性中的项)对 JSTL 不可用。因此测试结果总是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 学习资源。我建议前往其他资源。

关于java - 如何比较 2 个字符串 <c :if>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4993719/

相关文章:

java - rJava:从 R 创建零长度 Java 数组

javascript - onload 脚本在 JSF 的 subview 页面中不起作用

jsp - javax.faces.FacesException : java. lang.RuntimeException:找不到 FacesContext

css - 右对齐 panelGrid 嵌套在另一个内部

css - 如何对齐 <h :panelGrid> to the right 中的元素

java - 有没有关于 Java 的 Google App Engine 的书?

java - Kotlin: Unresolved reference :ofInstant

java - 无法解析符号 'OnSeekBarChangeListener'

java - Servlet 的数据库处理程序

javascript - 如何从表格单元格中获取数据?