我有一个奇怪的错误,这种错误只会在某些时候发生,而且我无法弄清楚出了什么问题。 我收到以下错误:
已在视图中找到组件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。
首先,此页面呈现良好(使用上面显示的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>
然后正常工作