<f:ajax>包含一个未知的id:someid用于<ui:repeat> </ui:repeat> </f:ajax>

时间:2011-08-31 14:16:22

标签: jsf-2

我的代码段:

<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

1 个答案:

答案 0 :(得分:2)

那是不可能的。 <ui:repeat>在客户端ID前面加上自己的ID和索引。所有这些小组都会获得j_id1:0:someidj_id1:1:someidj_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>