【问题标题】:Multiple <cc:insertChildren /> in the same composite component同一个复合组件中的多个 <cc:insertChildren />
【发布时间】:2011-12-01 00:47:10
【问题描述】:

我正在尝试使用 autoComplete 和 dataTable 的联合来制作复合组件。像这样:

<util:myCustomComp ...>
    <p:column>#{item.code}</p:column>
    <p:column>#{item.name}</p:column>
</util:myCustomComp>

在 CC 文件中:

<p:autoComplete ...>
    <cc:insertChildren /> <!-- Show columns only in autocomplete -->
</p:autoComplete>
<p:dataTable ...>
    <cc:insertChildren />
</p:dataTable>

但第二个没有渲染,只渲染第一个并跳过(在 autoComplete 或 dataTable 中)。

<p:autoComplete ... />
<p:dataTable ...>
    <cc:insertChildren /> <!-- Show columns in dataTable -->
</p:dataTable>

【问题讨论】:

    标签: autocomplete jsf-2 datatable primefaces composite-component


    【解决方案1】:

    每个复合组件只能在视图中使用 cc:insertChildren 一次,否则将引发重复 id 异常。不幸的是,没有办法可以工作:-(。

    【讨论】:

      【解决方案2】:

      不幸的是,这行不通,也没有办法以声明方式复制组件。你能得到的最接近的是使用&lt;ui:include&gt;

      columns.xhtml

      <ui:composition ...>
          <p:column>#{item.code}</p:column>
          <p:column>#{item.name}</p:column>
      </ui:composition>
      

      主视图:

      <util:myCustomComp columnsFile="/columns.xhtml" ... />
      

      复合实现:

      <p:autoComplete ...>
          <ui:include src="#{cc.attrs.columnsFile}" />
      </p:autoComplete>
      <p:dataTable ...>
          <ui:include src="#{cc.attrs.columnsFile}" />
      </p:dataTable>
      

      (免责声明:未经测试,如果打开部分状态保存,这可能会破坏视图范围的 bean)

      【讨论】:

      • 感谢您的帮助。但是为每次使用创建一个新文件是非常困难的。现在,我使用 dataTable 中的子列和 autoComplete 中的 toString。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 2017-10-07
      相关资源
      最近更新 更多