在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
,则表格中的最低行仍然可见,但所有单元格都为空:
如何使用显示的rendered
属性仅显示特定行?有人可以帮忙吗?
答案 0 :(得分:13)
在您的尝试中,您确实只是有条件地呈现<td>
内容,而不是<tr>
。遗憾的是,有条件地渲染<tr>
的{{1}}是不可能的。
您基本上有两种选择:
修复模型,使其完全符合视图的预期。
<p:dataTable>
使用<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>