我需要创建一个 rich:dataTable (甚至扩展),具有以下功能:
我有一个公司类,其中包含产品对象的集合。我想展示下表:
我仍然没有弄清楚如何使用子表执行此操作(在所有示例中,我发现子表具有与主表完全相同的列)。据推测,我需要在前两列中使用行跨度,但我仍然没有找到方法。
有人可以为此提供伪代码吗?
Cheers!
更新1:我尝试设置rowspan左侧列的大小作为列表或产品的大小,然后:
- 如果产品为空(该公司还没有产品),我会打印两列。我通过设置他们的条件来做到这一点rendered归因于#{myFuncs:sizeOf(company.products)}
- 如果产品>= 1,那么我用以下方法迭代它们在该循环中,我插入两列(一列用于产品名称,一列用于描述),对于除第一个之外的每个产品名称列,我设置中断前归因于#{ !myFunc:firstProduct(company.products, 产品)},对于除第一个产品名称之外的所有产品名称,其计算结果均为 true。
不幸的是,这对我不起作用,因为里面的列a4j:重复根本不出现 - 不是因为rendered标签。该循环是正确的,因为如果我打印其他标准文本,它就会出现。
有没有办法实现行跨度,或者我是在把头撞在墙上吗?
更新2:这个问题可能与此有关article http://blog.hibernate.org/11633.lace,表明迭代组件之间的差异,例如和标签。第一个发生在呈现时,而第二个发生在更早的时候,即 JSF 组件被放置到页面的组件树上时。
我试图获取 a4j:repeat 之外的 rich:columns,它们会被渲染(当然,不像预期的那样,但它们确实如此)。
您无需那些复杂的 forEachs 即可完成此操作。您只需要利用 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>
对我来说完美呈现。请注意,我使用的 Seam 具有 Jboss Extended EL,它允许我在集合上调用 size()。如果您不使用它,您可以使用 prs:collectionSize() 或 fn:length() 作为替代。
这也可以很好地与 Richfaces datascroller 配合使用。
希望这可以帮助。
D.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)