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

goh*_*gle 4 datatable jsf facelets uiinclude

我想<ui:include>动态地多次包含一个页面.

码:

<h:dataTable ..>
    <h:column>
        <ui:include  src="#{create_page}">
    <h:column>
<h:dataTable>
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 5

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

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

  1. 使用<c:forEach>而不是<h:dataTable>,这也在视图构建期间运行.

  2. 使用标记文件或复合组件代替<ui:include>,在视图渲染时也会运行.

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

也可以看看: