如何在<h:datatable>中使用<ui:include>?</h:datatable> </ui:include>

时间:2012-06-13 21:08:43

标签: jsf datatable facelets uiinclude

我想多次动态地将<ui:include>一页加入其中。

代码:

<h:dataTable ..>
    <h:column>
        <ui:include  src="#{create_page}">
    <h:column>
<h:dataTable>

现在,当我提交时,它只会持续最后一次。它只记住最后一个包含页面的值。我想在每个create_page中使用唯一的实体对象。我怎么能这样做?

1 个答案:

答案 0 :(得分:5)

<ui:include>是在视图构建期间执行的标记处理程序,而<h:dataTable>是在视图渲染时执行的UI组件。这意味着<ui:include>仅在{em> {/ 1}}之前执行一次,因此在迭代期间不会执行。您实际上最终会在每一行中使用完全相同的包含源。提交表单时,会逐行处理行直到最后一行,这就是为什么有效地结束最后一行的值。

基本上有两种方法可以解决这个问题:

  1. 使用<h:dataTable>代替<c:forEach>,这也会在视图构建期间运行。

  2. 使用标记文件或复合组件而不是<h:dataTable>,这也会在视图渲染时运行。

  3. 无论哪种方式,您还需要确保输入值绑定到数据表的<ui:include>属性后面的对象,而不是绑定到同一个支持bean属性。

    另见: