簡體   English   中英

具有動態列的DataTable

[英]DataTable with dynamic columns

我是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>

我想要做的是在一組<h:column>...</h:column>標簽周圍添加一個<c:forEach...>來迭代列數,但是沒有工作 - 我嘗試了各種組合,但我期待這樣的工作:

<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進行進一步處理。 JSTL忙時#{row}不可用,因此您的嘗試確實無效。

鏈接主題確實提到了已棄用的方法,但該主題也已老化並討論了舊版JSF 1.0 / 1.1。 如果你探索上述方法的當前Javadocs,你會看到 - 通常 - 提到了替換方法。 例如, Application#createValueBinding()提到以下內容:

不推薦 這已經被調用getExpressionFactory()然后調用ExpressionFactory.createValueExpression(javax.el.ELContext, java.lang.String, java.lang.Class)取代。

你可以找到的動態填充一個DataTable這種方式在一些具體的例子這篇文章

對於第三方組件庫,RichFaces有一個rich:columns組件,專門用於此目的。

第三方庫PrimeFaces具有p:columns組件,用於從數據源動態生成列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM