h:dataTable "var" 属性在 facet EL 中不起作用

h:dataTable "var" attribute doesn't work inside facet EL

我的问题是我不知道如何使 <f:facet> 中的 EL 代码与 <h:dataTable> var 属性一起工作。

JSF代码:

<h:dataTable value="#{backingBean.someList}" var="absolutelyUniqueVar">
    <h:column>
       <f:facet name="header">#{backingBean.someEntity}</f:facet>
       <h:outputText value="#{backingBean.someEntity.someField}"/>
    </h:column>
    <h:column>
       <f:facet name="header">#{absolutelyUniqueVar.anotherField}</f:facet>
       <h:outputText value="#{absolutelyUniqueVar.anotherField}"/>
    </h:column>
</h:dataTable>

它产生什么:

<table>
    <thead>
       <tr>
           <th>someEntityClass@f613189e</th>
           <th></th>
       </tr>
    </thead>
    <tbody>
       <tr>
           <td>someField</td>
           <td>anotherField</td>
       </tr>
    </tbody>
</table>

如您所见,第一个 <f:facet> 中的 EL 工作正常,但第二个没有任何结果。

我不熟悉 JSF,所以我将不胜感激任何帮助。 谢谢。

这是意料之中的事情。在普通 header 中使用迭代变量的值是没有意义的。你会在那里展示什么?到了第二行怎么办?覆盖第一个元素的值?然后最后你只会看到最后一个元素的值。但由于这也没有意义,所以你想要的东西是不可能的。它在任何方面都没有意义......有或没有 JSF。

引自@BalusC 的评论,另请参阅此处也适用:

.. but you're not terribly clear on which row exactly you want to show in the column header and why exactly. Usually, a table doesn't work like that. The column header should represent a description of the column, e.g. "Name", "Email", "Title", "Price", etc. In your specific case, "Key" and "Value" would be candidate headers for those two columns. Note that this is not a JSF problem, but just a general model/design problem as to tabular data. You'd have exactly the same problem when trying the same in any other presentation framework.

如果你想使用某个元素的值(例如一个通用的度量单位),那么在 header:

中显式引用一个(第一个?)元素
#{backingBean.someList[0].uom}

另请参阅