包含迭代和组合组件的重复ID

时间:2019-02-12 16:12:05

标签: primefaces jsf-2 composite-component mojarra

我有一个奇怪的错误,这种错误只会在某些时候发生,而且我无法弄清楚出了什么问题。 我收到以下错误:

  

已在视图中找到组件ID form_lpm:PODports:PODlocalChargeTable:j_idt1665:j_idt1667:chargeDiv。

好吧,我们都知道JSF中不能有重复的ID,但是上面的ID实际上并不存在! 我有这样的东西:

    <ui:repeat id="PODport">
       <p:dataTable id="PODlocalChargeTable">
            <p:columns>
                <my:compositeComp/>
            </p:columns>
       </p:dataTable>
   </ui:repeat>

复合组件(my:compositeComp)中有一个ID chargeDiv。 因此,在错误消息中,j_idt1665是p:columns迭代的动态ID,j_idt1667是复合组件的ID。

但是,在实际生成的HTML中,我们获得了这些ID(如您所料):绿色计数器用于ui:repeat,蓝色计数器用于dataTable,橙色计数器用于p:columns。 enter image description here

首先,此页面呈现良好(使用上面显示的ID),但是当我执行ajax请求并更新表单时,出现重复ID的错误。奇怪的是,计数器已从该ID中删除。为什么会这样,我该怎么办?

我尝试为p:columns(dynCol)和复合组件(compId)指定ID,有趣的是,我现在得到几乎相同的错误,但是ID中仍然有一个计数器:

 <ui:repeat id="PODport">
           <p:dataTable id="PODlocalChargeTable">
                <p:columns id="dynCol">
                    <my:compositeComp id="compId"/>
                </p:columns>
           </p:dataTable>
       </ui:repeat>
  

组件ID   form_lpm:PODports:PODlocalChargeTable:dynCol:2:compId:chargeDiv具有   已经在视图中找到

我遇到了两个不同的复合组件的问题。这些组件基本上就是这样:

<p:outputPanel id="chargeDiv">
    content
</p:outputPanel>
<p:tooltip for="chargeDiv">
    tooltip content
</p:tooltip>

我正在使用JSF 2.1(Mojarra 2.1.29-08)和Primefaces 6.1.18

更新: 我做了一些测试,这肯定与复合组件的使用有关。 如果我有一个非常简单的复合组件:

 <cc:implementation>
        <p:outputPanel id="chargeDiv">

        </p:outputPanel>

    </cc:implementation>

我有动态列,例如

<p:columns var="myvar" value="#{bean.list}" id="dynCol">
   <my:compositeComp/>
</p:columns>

我收到重复ID的错误。 如果我直接在p:columns中使用复合组件的内容:

<p:columns var="myvar" value="#{bean.list}" id="dynCol">
       <p:outputPanel id="chargeDiv">
           content
       </p:outputPanel>  
    </p:columns>

然后正常工作

0 个答案:

没有答案