如何限制数据显示在JSF中的数据表中的行中

时间:2012-07-18 15:23:23

标签: jsf datatable

有可能基于c:if。

限制数据中的数据显示

让我们说

现在显示输出:

Startdate     end date   status    Edit

2012-02-02    2012-03-02 Waiting   edit

2012-02-03    2012-03-04 Approved   edit

预期输出:

Startdate     end date   status    Edit

2012-02-02    2012-03-02 Waiting   edit

2012-02-03    2012-03-04 Approved  

当状态为等待时,应显示编辑链接。当它被拒绝或批准时,则不应显示编辑链接

这是我的Xhtml文件。

           <h:form>
      <h:dataTable value="#{employeeleave}" var="e"
            styleClass="order-table"
            headerClass="order-table-header"
            rowClasses="order-table-odd-row,order-table-even-row"
            columnClasses="order-table-odd-column,order-table-even-column"
        >

        <h:column>
            <f:facet name="header">
                Start Date
            </f:facet>
                #{e.startDate}
        </h:column>

        <h:column>
            <f:facet name="header">
                End Date
            </f:facet>
                #{e.endDate}
        </h:column>

        <h:column>
            <f:facet name="header">
                Reason
            </f:facet>
                #{e.reason}
        </h:column>

        <h:column>
            <f:facet name="header">
                Status
            </f:facet>
                #{e.status}
        </h:column>
            <h:column>
        <f:facet name="header">
            Edit
        </f:facet>
        <c:if test="${e.status == 'Waiting'}">
        <p:commandLink value="Edit" action="editLeave" id="editleave" >
        <f:setPropertyActionListener value="#{e}" target="#{employeeDetails.employeeLeaveSelected}" />
        </p:commandLink>
        </c:if>
        </h:column>
    </h:dataTable>  
    </h:form>

1 个答案:

答案 0 :(得分:2)

JSTL标记不起作用。它们在视图构建期间运行,而不是在视图渲染时间内运行,这是您期望的。在视图构建期间,${e} 可用,因此在您的特定情况下始终会解析为null

您需要使用JSF组件的rendered属性。

替换

<c:if test="${e.status == 'Waiting'}">
    <p:commandLink value="Edit" action="editLeave" id="editleave" >
        <f:setPropertyActionListener value="#{e}" target="#{employeeDetails.employeeLeaveSelected}" />
    </p:commandLink>
</c:if>

通过

<p:commandLink value="Edit" action="editLeave" id="editleave" rendered="#{e.status == 'Waiting'}">
    <f:setPropertyActionListener value="#{e}" target="#{employeeDetails.employeeLeaveSelected}" />
</p:commandLink>

另见: