dataTable将空值传递给Java后端

时间:2015-08-27 21:33:32

标签: jsf jsf-2 datatable jstl

我创建了一个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方法。有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

请参阅https://stackoverflow.com/a/3361723/1346369https://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>