c:在ui:repeat中的forEach inside primefaces(例如p:panelgrid)

Ant*_*nin 5 jsf primefaces jsf-2 panelgrid

我必须以恐怖的方式制作一份表格清单.它们中的每一个都具有可变数量的列(具有固定行).

为了执行此操作,我首先将<p:panelGrid>内部放入<ui:repeat>:所以我正确地生成了一个表列表.

然后,为了恐怖地制作柱子,我试着把它们放在一个 <ui:repeat>或一个 <c:forEach>里面<p:panelGrid>.在结果中我没有获得任何行.

我在这里写了一个小例子.在bean中testBackingBean,我已定义(并初始化)变量ArrayList<ArrayList<String>> tables.这是不会产生预期结果的xhtml:

<ui:repeat var="table" value="#{testBackingBean.tables}">
    <p:panelGrid>
        <f:facet name="header">
            <p:row>
                <p:column >header of #{table}</p:column>
            </p:row>
        </f:facet>
        <p:row>
            <c:forEach var="row" items="${table}">
                <p:column>#{row}</p:column>
            </c:forEach>
        </p:row>
    </p:panelGrid>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)

值得注意的是,标题行正确转换#{table}为字符串.问题是我看不到任何数据行.

此外,如果我使用<table>而不是<p:panelGrid>一切工作如期望的那样.

另外,我尝试了不同的排列<c:forEach><ui:repeat>没有更迭.

那么,我怎样才能产生更多的表格(使用素数面)并设置一个dinamical数量的列?

谢谢!

编辑:我想使用两个<c:forEach>,但即使只有一个<c:forEach>我得到一个空的结果.事实上,如果我尝试以下xhtml:

<c:forEach  items="${testBackingBean.tables}" var="tabella">
    current element: #{tabella}
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

然后我得到一个空的结果.(我知道,这是一个不同的问题)

Bal*_*usC 13

从XHTML源代码到生成的HTML输出的转换分为两步.

  1. 首先,在视图构建期间,XHTML源代码被解析并在UIComponent表示JSF UI组件树的Java 实例树中转换,如可用的那样FacesContext#getViewRoot().

  2. 然后,在视图渲染时,JSF UI组件树生成HTML输出并将其写入HTTP resopnse,从UIViewRoot#encodeAll()方法开始.

Taghandlers喜欢所有JSTL <c:xxx>标签,几个JSF <f:xxx>标签,只有几个Facelets <ui:xxx>标签在视图构建期间运行.UI组件,如所有JSF <h:xxx>标记,几个Facelets <ui:xxx>标记以及仅<f:xxx>在视图渲染时间内运行的几个JSF 标记.

<c:forEach>是一个taghandler所述<ui:repeat>是一个UI组件.

换句话说,<c:forEach>基于<c:forEach items>视图构建时间在JSF组件树中多次重新创建内部声明的UI组件,视图构建时间又在视图渲染时间内单独生成每个自己的HTML输出.内部声明的UI组件<ui:repeat>在视图构建时间内仅在JSF组件树中创建一次,而后者又基于<ui:repeat value>在视图渲染时间内生成HTML输出而被多次重用.

您的具体问题是由<ui:repeat var="table">仅在视图渲染时间期间可用的事实引起的,而不是在视图构建时期间.在<c:forEach>基本检索#{null}的值时,它是关于在视图生成时运行.

您可以通过更换外解决这个<ui:repeat>通过<c:forEach>.虽然我想知道你是否不能更好地使用<ui:repeat><p:dataTable><p:columns>.

也可以看看: