h:dataTable正确呈现行但在ui:repeat执行时不显示单元格值

时间:2014-11-09 19:11:30

标签: jsf jsf-2 datatable uirepeat

我有以下数据表。

<h:dataTable value="#{flightReservation.flightList}" var="flight">
    <h:column>
        <h:outputText value="#{flight.fromPlace}" />
    </h:column>
    <h:column>
        <h:outputText value="#{flight.toPlace}" />
    </h:column>
</h:dataTable>

即使行数等于flightList大小,它也不会在单元格内显示任何数据。

当我用<ui:repeat>替换它时,它会显示数据。

<ui:repeat value="#{flightReservation.flightList}" var="value">
    <h:outputText value="#{value.fromPlace}" />
    <h:outputText value="#{value.toPlace}" />
</ui:repeat>

这是如何引起的?如何解决?

1 个答案:

答案 0 :(得分:3)

我遇到过同样的行为,这只是变量范围的一个问题:

您说,行数是正确的,但内容未显示。您正在命名变量flight,我假设您的标记中已使用过具有此名称的值,甚至用作<ui:param>

Datatable现在正在迭代(内部)并生成正确数量的行,但是当它尝试访问fligt的属性时,jsf引用先前声明的变量并且无法找到属性{{1} },fromPlace等。

尝试重命名变量,看看这是否解决了您的问题。

即使人们期望显示列表的内容,下面的例子也会产生toPLace yoloyolo 。如果listsource是由对象组成的,那么对属性的任何实例访问都将失败,因为 yoloylo 不是预期类型的​​对象。

stringList.size()