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

时间:2016-04-19 07:11:23

标签: jsf jsf-2 primefaces datatable row

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>

订单类型标签(第三列)是Enumeration,可以是&#34;鞋子&#34;,&#34;衬衫&#34;或&#34;裤子&#34;。我只想用&#34; Shoes&#34;。

显示行

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

Empty row

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

2 个答案:

答案 0 :(得分:13)

在您的尝试中,您确实只是有条件地呈现<td>内容,而不是<tr>。遗憾的是,有条件地渲染<tr>的{​​{1}}是不可能的。

您基本上有两种选择:

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

    <p:dataTable>
  2. 使用<p:dataTable value="#{mbOrderController.shoesOrdersList}" var="shoesOrder"> 按CSS隐藏或设置特定行的样式。

    隐藏:

    rowStyleClass

    样式:

    <p:dataTable ... rowStyleClass="#{order.type.label == 'Shoes' ? 'ui-helper-hidden' : ''}">
    

    并在css中定义一个包含'shoeStyle'的类选择器(考虑css specificity

答案 1 :(得分:0)

尝试在列中呈现render="#{order.type.label eq 'Shoes'}",如果您不想为所有人写,那么您可以使用

<p:row render="#{order.type.label eq 'Shoes'}">
<p:column>
.
.
</p:row>