我创建了一个jsf文件,其中最重要的部分是:
h:dataTable value="#{gatekeeperStatusBean.list}" var="item"
styleClass="table-data"
headerClass="table-header"
rowClasses="table-odd-row,table-even-row">
<h:column><f:facet name="header">ID</f:facet>#{item.id}</h:column>
<h:column><f:facet name="header">Name</f:facet>#{item.name}</h:column>
<h:column><f:facet name="header">Status</f:facet>
<c:if test="#{gatekeeperStatusBean.isLogged(item)}">
<strong>LOGGED</strong>
</c:if>
<c:if test="#{not gatekeeperStatusBean.isLogged(item)}">
<strong>LOGGED OUT</strong>
</c:if>
</h:column>
</h:dataTable>
在第三栏“状态”中,我想打印出网守是否已登录数据库。带有#{item.id}的所有其他列ID和带有#{item.name}的Name都打印有效的非空值。当我想使用方法#{gatekeeperStatusBean.isLogged(item)}填充状态时,它显然是将NULL项值传递给Java方法。有人可以解释为什么会这样吗?
答案 0 :(得分:1)
请参阅https://stackoverflow.com/a/3361723/1346369和https://stackoverflow.com/a/3362869/1346369的答案,了解问题c:when and c:if don't work。
您可以使用替代
<h:column rendered="#{gatekeeperStatusBean.isLogged(item)}">
<f:facet name="header">LOGGED</f:facet>
<h:column rendered="#{not gatekeeperStatusBean.isLogged(item)}">
<f:facet name="header">LOGGED OUT</f:facet>
或在bean中有一个方法
public void getStatus(Item item)
{
return isLogged(item) ? "LOGGED" : "LOGGED OUT" ;
}
直接使用它与其他字段类似
<h:column><f:facet name="header">Name</f:facet>
#{gatekeeperStatusBean.status}
</h:column>