Jsf 在表的一行内动态生成表

Jsf 在表的一行内动态生成表,jsf,datatable,seam,Jsf,Datatable,Seam,我有一个SEAM 2、JSF 1.2 web应用程序和一个Java后端。目前我有一个显示书籍的表格(见下文)。我需要添加一个可折叠的表到这些行中的每一行,以显示本书的早期版本(#{u item.relatedVersions})。每个版本本身都是一本书(但没有可扩展的子版本表,即嵌套表上只有1级深度)。所以我想知道的是,在“表a”中显示书籍列表(#{bean.items})然后在“表a”的行中动态生成另一个表的最干净的方法是什么 身份证件 书名 评论 行动 …您是否已尝试使用 编辑:我更新

我有一个SEAM 2、JSF 1.2 web应用程序和一个Java后端。目前我有一个显示书籍的表格(见下文)。我需要添加一个可折叠的表到这些行中的每一行,以显示本书的早期版本(#{u item.relatedVersions})。每个版本本身都是一本书(但没有可扩展的子版本表,即嵌套表上只有1级深度)。所以我想知道的是,在“表a”中显示书籍列表(#{bean.items})然后在“表a”的行中动态生成另一个表的最干净的方法是什么


身份证件
书名
评论
行动

您是否已尝试使用

编辑:我更新了答案的主要部分,以显示更详细的示例:

<rich:dataTable id="bookList_dt" [...] var="_item" value="#{bean.items}" >
  <f:facet name="header">
    <rich:column>
      Header1
    </rich:column>
    <rich:column>
      Header2
    </rich:column>
  </f:facet>

  <rich:column>
    <a4j:commandLink id="toggleIcon" action="#{bean.toggleRelatedVisible(_item)}" reRender="bookList_dt">
      <h:graphicImage value="/img/plusIcon.gif" rendered="#{not bean.isRelatedVisible(_item)}" style="margin-right:4px;" />
      <h:graphicImage value="/img/minusIcon.gif" rendered="#{bean.isRelatedVisible(_item)}" style="margin-right:4px;" />
    </a4j:commandLink>
    <h:outputText value="#{_item.bookId}"/>
  </rich:column>
  [...]
  <rich:subTable value="#{_item.relatedVersions}"
                 var="_relatedItem" 
                 rendered="#{bean.isRelatedVisible(_item)}">
    <rich:column>
      <h:outputText value="#{_relatedItem.bookId}"/>
    </rich:column>
    [...]
  </rich:subTable>
</rich:dataTable>

校长1
校长2
[...]
[...]
在这个解决方案中,我将对子表的折叠/展开重新命名整个表。也许你能找到一个更有效的方法

当然,
bean
必须有一些包含子表状态(折叠/消耗)的布尔值集合



我还没有实现它,使它看起来像是正常工作的。虽然我似乎无法让切换为子表工作。有什么东西我需要包起来吗?这是一种方法。javaScript也能工作吗?如果是的话,它会是什么样子?谢谢不幸的是,我运行的是RichFaces3.xAbd,我没有访问rich:CollableSubtable的权限。所以我尝试使用可折叠的子表,但是我在为它编写javaScript切换程序时遇到了问题。如果您至少使用RichFace 3.4-Snapshot,这应该是可用的。没错,尽管我收到一个错误,说明它没有重新定义标记:(相信我,我很乐意使用它!
<rich:dataTable id="bookList_dt" [...] var="_item" value="#{bean.items}" >
  <f:facet name="header">
    <rich:column>
      Header1
    </rich:column>
    <rich:column>
      Header2
    </rich:column>
  </f:facet>

  <rich:column>
    <a4j:commandLink id="toggleIcon" action="#{bean.toggleRelatedVisible(_item)}" reRender="bookList_dt">
      <h:graphicImage value="/img/plusIcon.gif" rendered="#{not bean.isRelatedVisible(_item)}" style="margin-right:4px;" />
      <h:graphicImage value="/img/minusIcon.gif" rendered="#{bean.isRelatedVisible(_item)}" style="margin-right:4px;" />
    </a4j:commandLink>
    <h:outputText value="#{_item.bookId}"/>
  </rich:column>
  [...]
  <rich:subTable value="#{_item.relatedVersions}"
                 var="_relatedItem" 
                 rendered="#{bean.isRelatedVisible(_item)}">
    <rich:column>
      <h:outputText value="#{_relatedItem.bookId}"/>
    </rich:column>
    [...]
  </rich:subTable>
</rich:dataTable>
<h:form>
    <rich:dataTable value="#{carsBean.inventoryVendorLists}" var="list">
        <f:facet name="header">
            <rich:columnGroup>
                <rich:column colspan="6">
                    <h:outputText value="Cars marketplace" />
                </rich:column>
                <rich:column breakRowBefore="true">
                    <h:outputText value="Model" />
                </rich:column>
                <rich:column>
                    <h:outputText value="Price" />
                </rich:column>
                <rich:column>
                    <h:outputText value="Mileage" />
                </rich:column>
                <rich:column>
                    <h:outputText value="VIN Code" />
                </rich:column>
                <rich:column>
                    <h:outputText value="Items stock" />
                </rich:column>
                <rich:column>
                    <h:outputText value="Days Live" />
                </rich:column>
            </rich:columnGroup>
        </f:facet>
        <rich:column colspan="6">
            <rich:collapsibleSubTableToggler for="sbtbl" />
            <h:outputText value="#{list.vendor}" />
        </rich:column>
        <rich:collapsibleSubTable value="#{list.vendorItems}" var="item" id="sbtbl" expandMode="client">
            <rich:column>
                <h:outputText value="#{item.model}" />
            </rich:column>
            <rich:column>
                <h:outputText value="#{item.price}" />
            </rich:column>
            <rich:column>
                <h:outputText value="#{item.mileage}" />
            </rich:column>
            <rich:column>
                <h:outputText value="#{item.vin}" />
            </rich:column>
            <rich:column>
                <h:outputText value="#{item.stock}" />
            </rich:column>
            <rich:column>
                <h:outputText value="#{item.daysLive}" />
            </rich:column>
            <f:facet name="footer">
                <h:outputText value="Total of #{list.vendor} Cars: #{list.count}" />
            </f:facet>
        </rich:collapsibleSubTable>
    </rich:dataTable>
</h:form>