【问题标题】:Implementing subtables in JSF 1.1在 JSF 1.1 中实现子表
【发布时间】:2010-06-02 14:22:20
【问题描述】:

我们正在寻找一种在 JSF 1.1 中实现子表的方法。由于目标服务器是 WebSphere 6.1,我们不能使用 Rich Faces。我试过 JSTL 和 Tomahawk 无济于事。此外,我们的项目使用的是 JSP 而不是 facelets。

【问题讨论】:

  • 我很难在纯 HTML 中可视化“子表”。你不是说嵌套表吗?或者你的意思是colspans/rowspans?考虑发布一个纯 HTML 示例,结果应该是什么样子。
  • 是的,嵌套表。 JSTL 是不可能的,因为嵌套表必须包含 JSF 控件。

标签: jsf


【解决方案1】:

您可以在h:column 中相互nest h:dataTables。但是您实际上想随后在 new 行中嵌套另一个 h:dataTable。然后没有其他方法可以创建单个列并将h:panelGrid 放入其中以表示“主”行,并使用嵌套的h:dataTable 表示“详细”行。你还需要一个很好的 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,很好的例子,我非常接近。我剩下的唯一问题是如何对齐主表的标题。由于主表只有一列,它看起来很棘手 - 主标题标题也不能重复。嵌套表相当简单,因为每列都可以分配一个构面标签。
  • 将另一个h:panelGrid 放在外部f:facet 的外部h:column 中,并添加一些神奇的CSS 使其看起来正确。
猜你喜欢
  • 2012-11-08
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
  • 2011-02-03
  • 2011-08-24
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多