java - 具有动态列的数据表

标签 java jsf datatable foreach

我对 JSF 完全陌生,只是尝试概念验证以确定它是否对项目有用。我的 POC 仅包含一个页面和一个包含一些数据的表格。

列数(以及行数)是动态的,在呈现页面之前从数据库加载。

通过以下,我得到了两个具有适当行数的静态列,正如我所期望的那样:

<h:dataTable id="data" value="#{viewDataBean.dataRows}" var="row">
    <h:column>
        <f:facet name="header">
            <h:outputText value="Col 1"/>
        </f:facet>
        <h:outputText value="#{row.values[0].value}"/>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:outputText value="Col 2"/>
        </f:facet>
        <h:outputText value="#{row.values[1].value}"/>
    </h:column>
</h:dataTable>

我想做的是添加一个 <c:forEach...>围绕一组 <h:column>...</h:column>标签,以遍历列数,但这没有用 - 我尝试了多种组合,但我期待这样的事情起作用:

<h:dataTable id="data" value="#{viewDataBean.dataRows}" var="row">
    <c:forEach items="#{row.values}" var="val">
        <h:column>
            <f:facet name="header">
                <h:outputText value="Col 1"/>
            </f:facet>
            <h:outputText value="#{val.value}"/>
        </h:column>
    </c:forEach>
</h:dataTable>

通过谷歌搜索,我读到了各种含糊不清的评论,例如“这不是这样做的方法”,但我没能找到任何特别令人信服的正确方法示例。有人提到在支持 bean 中构建 DataTable,但我能找到的唯一示例是 http://forums.sun.com/thread.jspa?threadID=577589 .它有效,但感觉有点笨拙,尤其是因为所使用的一些方法已被弃用。

目前,我似乎不太可能使用除核心 JSF 之外的任何库,但如果绝对必要,这可能会改变。任何人都可以阐明执行此操作的正确方法吗?它看起来应该非常简单,所以我确定我只是遗漏了一些明显的东西。

最佳答案

JSTL 和 JSF 并不像您从编码中期望的那样同步运行。更多的是JSTL先把整个页面从上到下先处理,然后把结果交给JSF做进一步处理。 #{row} 在 JSTL 繁忙时不可用,因此您的尝试确实行不通。

链接的主题确实提到了已弃用的方法,但该主题也已过时并讨论了遗留的 JSF 1.0/1.1。如果您研究上述方法的当前 Javadoc,您将看到 - 像往常一样 - 提到了替换方法。例如,Application#createValueBinding()提到以下内容:

Deprecated. This has been replaced by calling getExpressionFactory() then ExpressionFactory.createValueExpression(javax.el.ELContext, java.lang.String, java.lang.Class).

您可以在 this article 中找到一些以这种方式动态填充数据表的具体示例。 .

至于第 3 方组件库,RichFaces 有一个 rich:columns正是为此目的而设计的组件。

关于java - 具有动态列的数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2951729/

相关文章:

Angular 7 - 重新加载数据表中的数据

c# - DataTable 具有多个可能的 Column 名称

java - 如何使用线性布局?

Java 正则表达式文件扩展

java - Java如何处理原始数字和引用数字之间的长比较?

java - 表单提交时出现 noSuchElementException

jsf - 重定向时的 flash.keep 和 flash.setKeepMessages(true)

jsf导航问题

java - 更新(来自 p :ajax) Primefaces datatable select all rows of the table

java - 以 Java/Maven 方式使用 URL 指纹管理积极缓存