h:dataTable“ var”属性在构面EL内不起作用

时间:2019-03-12 09:54:08

标签: jsf el

我的问题是我无法弄清楚如何使 /* REXX */ say 'sysvar(syspref):' sysvar(syspref) say 'sysvar(sysuid): ' sysvar(sysuid) 内部的EL代码与<f:facet> <h:dataTable>属性一起工作。

JSF代码:

var

产生的东西:

<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> 中的EL可以正常工作,但是第二个则什么也没产生。

我对JSF不熟悉,所以我将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:3)

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

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

  

..,但是您并不清楚要在列标题中确切显示在哪一行上,也不清楚为什么。通常,表不能那样工作。列标题应代表该列的说明,例如“名称”,“电子邮件”,“标题”,“价格”等。在您的特定情况下,“键”和“值”将是这两列的候选标题。注意,这不是JSF问题,而只是表格数据的一般模型/设计问题。在任何其他演示文稿框架中尝试相同的操作时,都会遇到完全相同的问题。

如果您要使用某个元素的值(例如,度量单位的通用单位),则在标头中显式引用一个(第一个?)元素:

#{backingBean.someList[0].uom}

另请参见