实际上我正在使用Myfaces
版本2.2.9
,我有以下结构来根据用户选择的特定号码生成任何面板。
...
<ui:repeat value="#{garajes}" var="garaje" varStatus="loop">
<p:panelGrid >
<h:outputLabel value="Numero de garaje #{loop.index+1}: " />
<h:outputLabel value="Matricula #{loop.index+1}: " />
<p:inputText value="#{garaje.numeroGaraje}" maxlength="5" >
</p:inputText>
<p:inputText id="matriculaInmobiliariaGaraje-#{loop.index+1}" value="#{garaje.matriculaInmobiliaria}"
maxlength="20">
</p:inputText>
...
</p:panelGrid>
</ui:repeat>
....
因此,当呈现上面的代码时,标识符很奇怪,还有另外一些东西,如下图:
所以我不知道如何在id
中删除这些奇怪的东西注意:我需要一个特定的ID来更新循环中的另一个组件。
如何在ui:repeat
内找到正确的标识符?
答案 0 :(得分:1)
关于具体问题,只需为所有NamingContainer
组件提供固定ID即可。这包括<ui:repeat>
本身。
<ui:repeat id="garajes" ...>
至于具体要求,你的事情过于复杂。 NamingContainer
本身就会担心孩子ID的唯一性。您在id="matriculaInmobiliariaGaraje-#{loop.index+1}"
中的尝试将无法正常工作,因为在使用#{loop}
实例化组件的视图构建时,id
变量不可用。摆脱它。您可以在NamingContainer
内使用相对ID来引用同一NamingContainer
中的其他组件。
<ui:repeat ...>
<p:inputText id="foo" />
<p:inputText ...><p:ajax ... update="foo" /></p:inputText>
</ui:repeat>
这样可以正常使用。