如何有条件地渲染或设置一行primefaces dataTable?

Joh*_*ohn 2 datatable jsf row primefaces jsf-2

在我的内心p:dataTable,我试图只渲染我需要的行.码:

<h:form id="f">
    <p:dataTable var="order"
        value="#{mbOrderController.ordersList}">
        <f:facet name="header">#{msg.orders}</f:facet>

        <p:column sortBy="#{order.orderNr}"
            headerText="#{msg.order_number}">
            <p:outputLabel value="#{order.orderNr}"
                rendered="#{order.type.label == 'Shoes'}" />
        </p:column>

        <p:column sortBy="#{order.date}" headerText="#{msg.date}">
            <p:outputLabel value="#{order.date}">
                <f:convertDateTime pattern="dd.MM.yy" />
            </p:outputLabel>
        </p:column>

        <p:column sortBy="#{order.type.label}" headerText="#{msg.type}">
            <p:outputLabel value="#{order.type.label}" />
        </p:column>
    </p:dataTable>
</h:form>
Run Code Online (Sandbox Code Playgroud)

订单类型标签(第三列)是一个Enumeration,可以是"鞋子","衬衫"或"裤子".我只想显示带有"Shoes"的行.

试图将rendered属性添加到第一个p:outputLabel当然只隐藏此输出标签的属性.如果我将该rendered属性添加到p:outputLabel表中的每个属性,则表中的最低行仍然可见,尽管所有单元格都是空的:

空行

如何使用显示的rendered属性仅显示特定行?有人可以帮忙吗?

Bal*_*usC 14

在你的尝试中,你确实只是有条件地渲染<td>内容,而不是<tr>.遗憾<tr><p:dataTable>是,不可能有条件地渲染a .

你基本上有两个选择:

  1. 修复模型,使其完全符合视图的预期.

    <p:dataTable value="#{mbOrderController.shoesOrdersList}" var="shoesOrder">
    
    Run Code Online (Sandbox Code Playgroud)
  2. 用于rowStyleClass通过CSS隐藏或设置特定行的样式.

    隐藏:

    <p:dataTable ... rowStyleClass="#{order.type.label == 'Shoes' ? 'ui-helper-hidden' : ''}">
    
    Run Code Online (Sandbox Code Playgroud)

    造型:

    <p:dataTable ... rowStyleClass="#{order.type.label == 'Shoes' ? 'shoeStyle' : ''}">
    
    Run Code Online (Sandbox Code Playgroud)

    并在css中定义一个包含'shoeStyle'的类选择器(考虑到css特异性)