dataTable 将空值传递给 Java 后端

dataTable passing null values to Java backend

我已经创建了一个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>

在第三列"Status"我想打印出看门人是否在数据库中登录。所有其他带有 #{item.id} 的列 ID 和带有 #{item.name} 的名称正在打印有效的非空值。当我想使用 #{gatekeeperStatusBean.isLogged(item)} 方法填充状态时,它显然将 NULL 项目值传递给 Java 方法。有人可以解释为什么会这样吗?

请参考答案 and for the question 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>