jsf - c :forEach inside primefaces(e. g。 p:panelgrid)在ui内:重复

标签 jsf jsf-2 primefaces 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>

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

此外,如果我使用<table>而不是 <p:panelGrid>一切都按预期进行。

此外,我尝试了 <c:forEach> 的不同排列和<ui:repeat>没有成功。

那么,我如何动态地生成更多表格(使用素面)并设置动态的列数?

谢谢!

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

<c:forEach  items="${testBackingBean.tables}" var="tabella">
    current element: #{tabella}
</c:forEach>

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

最佳答案

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

  1. 首先,在 View 构建期间,XHTML 源代码被解析并转换为 Java UIComponent 树。表示 JSF UI 组件树的实例,可通过 FacesContext#getViewRoot() 获取。 .

  2. 然后,在 View 渲染期间,JSF UI 组件树生成 HTML 输出并将其写入 HTTP 响应,从 UIViewRoot#encodeAll() 开始。方法。

Taghandlers像所有 JSTL <c:xxx>标签,几个 JSF <f:xxx>标签和只有几个 Facelet <ui:xxx>标签在 View 构建期间运行。 UI components与所有 JSF 一样 <h:xxx>标签,几个 Facelet <ui:xxx>标签和只有几个 JSF <f:xxx>标签在 View 渲染期间运行。

The <c:forEach> is a taghandlerthe <ui:repeat> is an UI component .

换句话说,<c:forEach> 中声明的 UI 组件基于 <c:forEach items> 在 JSF 组件树中重新创建多次在 View 构建期间, View 渲染期间又分别生成各自的 HTML 输出。 <ui:repeat> 中声明的 UI 组件在 View 构建期间仅在 JSF 组件树中创建一次,然后根据 <ui:repeat value> 多次重复使用这些组件在 View 渲染期间生成 HTML 输出。

您的具体问题是由 <ui:repeat var="table"> 引起的仅在 View 渲染期间可用,在 View 构建期间不可用。 <c:forEach>基本上是检索 #{null}作为 View 构建期间即将运行时的值。

您可以通过替换外部 <ui:repeat> 来解决此问题通过<c:forEach> 。虽然我想知道你是否不能更好地使用 <ui:repeat><p:dataTable><p:columns>相反。

另请参阅:

关于jsf - c :forEach inside primefaces(e. g。 p:panelgrid)在ui内:重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21697024/

相关文章:

java - 带有 liberty 服务器的 JSF CDI 示例不起作用

JSF-将参数传递给 valuechangelistener

java - Servlet上下文获取真实路径返回null

javascript - 禁用 <p :menuitem> during page loading

jsf - JSF 2:在rendered属性中使用枚举

java - 状态更新不起作用

jsf - 在 JSF 转换/验证机制之外的操作方法中创建 FacesMessage?

ajax - 如何ajax更新p :dataTable from inside the p:dataTable itself?

java - 使用 Primefaces 在文件系统上上传文件

css - DataTable 中未对齐的行与 Primefaces 5.0 JSF 2.2 中的卡住列