为什么<c:forEach>或<ui:repeat>不能访问<p:dataTable var>?

Gol*_*ict 3 datatable foreach jsf jstl primefaces

我正在使用jsf Mojarra 2.2.7,Java 8,Primefaces 5.1和netbeans 8.0.2

我有Event一个属性的班级List<GameRecord> gameRecordList.GameRecord包括List<Boolean> gamesEntered和其他属性.我的想法是,我有一个活动中的人员列表,如果他们进入投注或比赛,我正在配置.

在我的.xhtml文件中

<p:dataTable value="#{events.gameRecordList}" var="item" rowIndexVar="rowIndex">

                <p:column>#{item.field1}</p:column>
                <p:column>#{item.field2}</p:column>

                <c:forEach items="#{events.gameRecordList.get(rowIndex).gamesEntered}" var="game">
                    <p:column>
                        <p:selectBooleanCheckbox value="#{game}"/>
                    </p:column>
                </c:forEach>


            </p:dataTable>
Run Code Online (Sandbox Code Playgroud)

<c:forEach>应一起工作value="#{item.gamesEntered}",而不是整个字符串,但事实并非如此.我试过<ui:repeat>但无论哪种方式,页面都会出现空白,此数据应该出现.

这是否有意义或是否有理由需要完全寻址才能使其正常工作?

Bal*_*usC 6

<c:forEach>应一起工作value="#{item.gamesEntered}",而不是整个字符串,但事实并非如此.

JSTL标记在视图构建期间运行,构建JSF组件树.JSF组件在视图渲染时运行,生成HTML输出.因此,目前<c:forEach>运行,<p:dataTable>没有运行,它var无处可用,将评估为null.请注意,这同样适用于rowIndexVar,将评估为0(an的默认值int).

也可以看看


我试过<ui:repeat>但无论哪种方式,页面都会出现空白,此数据应该出现.

UIData组件只能接受UIColumn儿童.在<ui:repeat>不是这样的.这<c:forEach>是因为它基本上为数据表生成了一堆物理<p:column>组件.你很幸运,每个项目的数量显然与gamesEntered第一个项目相同,否则这也会很难.

也可以看看:


顺便说一下,你需要<p:columns>哪个基本上是<ui:repeat>UIColumn类扩展而来的.但是在这里,它value不能按行设置,只能在每个表的基础上设置.该rowIndexVar不在可用的<p:columns value>和将评估0反正.

<p:dataTable value="#{events.gameRecordList}" var="item" rowIndexVar="rowIndex">
    <p:column>#{item.field1}</p:column>
    <p:column>#{item.field2}</p:column>
    <p:columns value="#{events.gameRecordList[0].gamesEntered}" columnIndexVar="columnIndex">
        <p:selectBooleanCheckbox value="#{events.gameRecordList[rowIndex].gamesEntered[columnIndex]}"/>
    </p:columns>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)

也可以看看:


归档时间:

查看次数:

5964 次

最近记录:

10 年,8 月 前