【问题标题】:Expand collapse of table rows in Datatable JSF在 Datatable JSF 中展开表行的折叠
【发布时间】:2011-01-09 04:35:31
【问题描述】:

我一直在尝试使用核心 JSF 实现表行展开/折叠的功能,而且我必须保留排序。核心 JSF 中有没有一种方法可以实现此功能?

【问题讨论】:

    标签: jsf datatable expand collapse


    【解决方案1】:

    如果您坚持只使用参考实现,那么您就不能使用嵌套的h:dataTable 和/或h:panelGroup 以及good 的 CSS 镜头来很好地对齐。然后,您可以使用 JavaScript 以智能方式显示/隐藏行详细信息。

    这是一个基本的启动示例:

    <h:dataTable value="#{bean.orders}" var="order">
        <h:column>
            <h:panelGrid columns="3">
                <h:graphicImage id="expand" value="expand.gif" onclick="toggleDetails(this);" />
                <h:outputText value="#{order.id}" />
                <h:outputText value="#{order.name}" />
            </h:panelGrid>
            <h:dataTable id="details" value="#{order.details}" var="detail" style="display: none;">
                <h:column><h:outputText value="#{detail.date}" /></h:column>
                <h:column><h:outputText value="#{detail.description}" /></h:column>
                <h:column><h:outputText value="#{detail.quantity}" /></h:column>
            </h:dataTable>
        </h:column>
    </h:dataTable>
    

    toggleDetails() 函数可能看起来像(注意它考虑了 JSF 生成的客户端 ID):

    function toggleDetails(image) {
        var detailsId = image.id.substring(0, image.id.lastIndexOf(':')) + ':details';
        var details = document.getElementById(detailsId);
        if (details.style.display == 'none') {
            details.style.display = 'block';
            image.src = 'collapse.gif';
        } else {
            details.style.display = 'none';
            image.src = 'expand.gif';
        }
    }
    

    【讨论】:

    • 是否可以对列进行排序
    • 确实有可能。你可以在这里找到一个例子:balusc.blogspot.com/2006/06/…
    • 我是 JSF 新手,只是想知道我是否可以实现面板网格的排序以及面板网格内的嵌套表。排序算法应该缩短 panelGrid 和 datatable 中的所有元素。
    • 是的,您可以,让一个按钮在列表中执行所需的Collections#sort() 操作,然后重新显示。
    【解决方案2】:

    我认为您不能使用“核心”JSF 来执行此操作(我假设您的意思是仅使用参考实现)。

    据我了解,您可以使用 RichFaces subTable 完成子表

    您也可以使用 IceFaces 做类似的事情 - 请参阅 component showcase(它位于 Table -> Expandable Table 下)。但是,其中任何一个都需要您添加和设置另一个库(RichFaces 或 IceFaces),这可能不是您想要的。

    【讨论】:

      【解决方案3】:

      带有 RichFaces 的简单可扩展表格

      我们可以用 RichFaces 做简单的可扩展表格 代码如下...

      <h:form>
         <rich:dataTable value="#{wonderBean.wonders}" var="wonder">
            <rich:column colspan="3">
               <f:facet name="header">Wonder</f:facet>
           <h:outputText value="#{wonder.name}" />
           <a4j:commandLink id="link" value="#{!wonderBean.show?'[+]':'[-]'}"
              reRender="link">
           <a4j:actionparam name="val" value="#{!wonderBean.show}"
              assignTo="#{wonderBean.show}" />
           </a4j:commandLink>
            </rich:column>
            <rich:columnGroup>
               <rich:column>
              <a4j:outputPanel ajaxRendered="true">
                   <rich:dataTable value="#{wonder.details}" var="detail"
                  rendered="#{wonderBean.show}" style="border: 0px">
                      <rich:column>
                  <f:facet name="header">Location</f:facet>
                  <h:outputText value="#{detail.location}" />
                  </rich:column>
                  <rich:column>
                     <f:facet name="header">Image</f:facet>
                     <h:graphicImage value="#{detail.imageUrl}" />
                  </rich:column>
               </rich:dataTable>
                </a4j:outputPanel>
             </rich:column>
              </rich:columnGroup>
           </rich:dataTable>
      </h:form>
      

      【讨论】:

        猜你喜欢
        • 2013-09-25
        • 1970-01-01
        • 2021-08-05
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        • 2019-01-11
        • 2018-03-07
        • 2011-09-01
        相关资源
        最近更新 更多