我需要创建一个具有以下特性的 rich:dataTable(甚至扩展):
我有一个 Company 类,其中包含 Product 对象的集合。我想显示下表:
我仍然没有弄清楚如何使用子表执行此操作(在所有示例中,我发现子表具有与主表完全相同的列)。据推测,我需要在前两列中使用 rowspans,但我仍然没有找到方法。
有人可以为此提供伪代码吗?
干杯!
更新 1: 我尝试将左侧列的 rowspan 设置为列表或产品的大小,然后:
- 如果产品为空(公司还没有产品),我会打印两列。我通过将它们的 rendered 属性设置为 #{myFuncs:sizeOf(company.products)} 来有条件地执行此操作
- 如果产品 >= 1,那么我用 遍历它们,并在该循环中插入两列(一列用于产品名称,一列用于描述),对于每个产品名称列,除了第一个我将 breakBefore 属性设置为 #{ !myFunc:firstProduct(company.products, product)},这对除第一个以外的所有产品名称的计算结果为真。
不幸的是,这对我不起作用,因为 a4j:repeat 中的列根本没有出现 - 不是因为 rendered 标签。循环是正确的,因为如果我打印其他标准文本,它就会出现。
有没有办法实现 rowspan,还是我在用头撞墙?
更新 2:
这个问题可能与此有关 article , 表示
我试图在 a4j:repeat 之外获取 rich:columns,它们被渲染了(当然,不是预期的那样,但它们确实如此)。
最佳答案
您可以在没有那些复杂的 forEach 的情况下做到这一点。您只需要利用 subTable 和 rowKeyVar。
例如:
<rich:dataTable
value="#{backingBean.companyList}"
rows="100"
var="company">
<f:facet name="header">
<rich:columnGroup>
<rich:column>Company Name</rich:column>
<rich:column>Company Email</rich:column>
<rich:column>Product Name</rich:column>
<rich:column>Product Email</rich:column>
</rich:columnGroup>
</f:facet>
<rich:subTable value="#{company.products}" var="product" rowKeyVar="rowKey">
<rich:column rowspan="#{company.products.size()}" rendered="#{rowKey eq 0}">
#{company.name}
</rich:column>
<rich:column rowspan="#{company.products.size()}" rendered="#{rowKey eq 0}">
#{company.email}
</rich:column>
<rich:column>
#{product.name}
</rich:column>
<rich:column>
#{product.email}
</rich:column>
</rich:subTable>
</rich:dataTable>
为我呈现完美。请注意,我使用的是具有 Jboss Extended EL 的 Seam,它允许我对集合调用 size()。如果您不使用它,您可以使用 prs:collectionSize() 或 fn:length() 作为替代。
这也适用于 Richfaces datascroller。
希望这对您有所帮助。
D.
关于java - 丰富的 :datatable rowspan issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2028958/