我的代码段:
<ui:repeat var="o">
<h:panelGroup id="someid">
<ui:repeat>
// HTML
</ui:repeat>
</h:panelGroup>
<div>
<h:form>
<h:commandButton action="#{o.doSomething}">
<f:ajax event="action" render=":someid" />
</h:commandButton>
<h:form>
</div>
</ui:repeat>
为什么<f:ajax>
找不到someid
?
答案 0 :(得分:2)
那是不可能的。 <ui:repeat>
在客户端ID前面加上自己的ID和索引。所有这些小组都会获得j_id1:0:someid
,j_id1:1:someid
,j_id1:2:someid
等ID。以下内容适用于您的特定构造:
<f:ajax render=":#{component.parent.parent.clientId}:someid" />
这将动态地添加<ui:repeat>
的当前客户端ID。但是,只有当您使用MyFaces代替Mojarra时,它才有效。在Mojarra,<ui:repeat>
在很多方面都被打破了。他们为2.2安排了许多修复。
另一种方法是将它们分组到NamingContainer
这样的公共<h:form>
组件中,以便您可以使用相对ID。
<ui:repeat var="o">
<h:form>
<h:panelGroup id="someid">
<ui:repeat>
// HTML
</ui:repeat>
</h:panelGroup>
<div>
<h:commandButton action="#{o.doSomething}">
<f:ajax event="action" render="someid" />
</h:commandButton>
</div>
<h:form>
</ui:repeat>