【问题标题】:How to conditionally render or style a row of primefaces dataTable?如何有条件地渲染或设置一行primefaces dataTable?
【发布时间】:2016-08-11 04:44:16
【问题描述】:

在我的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,可以是“鞋子”、“衬衫”或“裤子”。我只想显示带有“鞋子”的行。

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

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

【问题讨论】:

  • 如果你只想显示鞋子,为什么不根据这个准备后端的源列表呢? OR:如果您希望能够在客户端进行过滤,为什么不在数据表上使用过滤器(filterBy=...)?

标签: jsf jsf-2 primefaces datatable row


【解决方案1】:

在您的尝试中,您确实只是有条件地呈现 &lt;td&gt; 内容,而不是 &lt;tr&gt;。不幸的是,不可能有条件地渲染 &lt;tr&gt;&lt;p:dataTable&gt;

你基本上有两种选择:

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

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

    隐藏:

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

    样式:

    <p:dataTable ... rowStyleClass="#{order.type.label == 'Shoes' ? 'shoeStyle' : ''}">
    

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 不幸的是它没有改变。如果我将rendered="#{order.type.label eq 'Shoes'} 添加到每个p:outputLabel 我仍然可以看到空行。用屏幕截图更新了我的问题。
    • 即使我在回答中提到过,请不要在 outputLabel 中添加列,但我怀疑尝试在 &lt;p:row&gt; 中添加渲染的其他选项,或者 @BalusC 说它不起作用,所以你可以试试选项也是如此。
    猜你喜欢
    • 2017-05-25
    • 2010-11-01
    • 2020-09-09
    • 2021-11-19
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多