我试图显示一个<h:outputText>或<h:commandLink>相应的由后备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示例
<jsp:useBean....>
谢谢你的帮助
您似乎在<h:dataTable>。JSTL标签仅在视图构建时评估,而不在视图渲染时评估。归结为:JSTL首先从上到下运行,然后将产生的结果移交给JSF,再从上到下运行。目前,在JSF数据表中评估JSTL标记时var,JSTL无法使用该数据表的迭代项(in 属性)。因此,测试结果始终为false。
<h:dataTable>
var
false
只需使用JSF组件的rendered属性即可。
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'}" />
与具体问题无关,Rosindia 不是最佳的JSF学习资源。我建议前往其他资源。