【问题标题】:h:dataTable "var" attribute doesn't work inside facet ELh:dataTable "var" 属性在 facet EL 中不起作用
【发布时间】:2019-03-12 09:54:08
【问题描述】:

我的问题是我不知道如何使 <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>

如您所见,第一个 &lt;f:facet&gt; 中的 EL 工作正常,但第二个没有产生任何结果。

我不熟悉 JSF,因此我将不胜感激。 谢谢。

【问题讨论】:

    标签: jsf el


    【解决方案1】:

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

    引用@BalusC 的评论,也适用于此处:

    .. 但是您并不太清楚要在列标题中显示哪一行以及确切原因。通常,一张桌子不会那样工作。列标题应代表该列的描述,例如“名称”、“电子邮件”、“标题”、“价格”等。在您的特定情况下,“键”和“值”将是这两列的候选标题。请注意,这不是 JSF 问题,而只是关于表格数据的一般模型/设计问题。在任何其他演示框架中尝试相同的问题时,您会遇到完全相同的问题。

    如果你想使用某个元素的值(例如,一个常用的测量单位),那么在标题中显式引用一个(第一个?)元素:

    #{backingBean.someList[0].uom}
    

    另请参阅

    【讨论】:

    • 当你的答案突然出现时正在考虑它。好点!
    • 我也是。我之前的评论可能读起来有点像我有同样的想法,但事实并非如此。
    猜你喜欢
    • 2011-01-26
    • 2015-08-07
    • 1970-01-01
    • 2014-11-15
    • 2012-08-15
    相关资源
    最近更新 更多