java - 丰富的 :datatable rowspan issue

标签 java jsf jakarta-ee richfaces jstl

我需要创建一个具有以下特性的 rich:dataTable(甚至扩展):

我有一个 Company 类,其中包含 Product 对象的集合。我想显示下表:

alt text

我仍然没有弄清楚如何使用子表执行此操作(在所有示例中,我发现子表具有与主表完全相同的列)。据推测,我需要在前两列中使用 rowspans,但我仍然没有找到方法。

有人可以为此提供伪代码吗?

干杯!

更新 1: 我尝试将左侧列的 rowspan 设置为列表或产品的大小,然后:

  • 如果产品为空(公司还没有产品),我会打印两列。我通过将它们的 rendered 属性设置为 #{myFuncs:sizeOf(company.products)}
  • 来有条件地执行此操作
  • 如果产品 >= 1,那么我用 遍历它们,并在该循环中插入两列(一列用于产品名称,一列用于描述),对于每个产品名称列,除了第一个我将 breakBefore 属性设置为 #{ !myFunc:firstProduct(company.products, product)},这对除第一个以外的所有产品名称的计算结果为真。

不幸的是,这对我不起作用,因为 a4j:repeat 中的列根本没有出现 - 不是因为 rendered 标签。循环是正确的,因为如果我打印其他标准文本,它就会出现。

有没有办法实现 rowspan,还是我在用头撞墙?

更新 2: 这个问题可能与此有关 article , 表示 和标签 等迭代组件之间的区别。第一个发生在渲染时,而第二个发生在更早的时候,当 JSF 组件被放置到页面的组件树上时。

我试图在 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/

相关文章:

java - 需要使用Quartz和Spring,无需配置

java - Android 中 SparseArrayCompat 政策不断增长背后的基本原理是什么?

java - ActiveMQ createSession 超时

html - 使用ajax更新preRenderView组件

java - Tomcat中基于请求的入侵检测

java - 如何测试 JAX-RS @POST

rake db 的 Java EE 替代品 :migrate

java - Grails 框架方法 addTo 在多次调用时抛出异常

java - 何时/何地在 Java EE Web 应用程序上创建实体?

jsf - ajax 渲染后 commandButton 处于非事件状态