f:嵌套的UI中的ajax:重复

问题描述:

我试图使用ajax重新渲染一个对象列表中的对象的列表容器时,按钮按下按钮删除对象的子对象列表中的元素。但我无法找到子列表对象的父容器。f:嵌套的UI中的ajax:重复

将Java对象被表示为这样
IE

public class Advertisements{ 
     List<object1> messages; 
//getters setters etc. 
} 

public class object1{ 
    List<object2> stops; 
} 

现在我试图与每个停止删除按钮(第二嵌套对象列表)相关联,并重新呈现这些容器用f:ajax渲染停止。

IE

<h:form id="campaign" > 
    <ui:repeat id="messages" var="message" value="#{Advertisements.active.messages}" > 
     <h:panelGroup id="stopList" binding="#{waga}"> 
      <ui:repeat id="temp" var="stop" value="#{message.stops}" > 
       <div class="col-sm-2"> 
        <h:outputLabel value="#{stop.name}"/> 
       </div> 
       <div class="col-sm-1"> 
        <h:commandLink action="#{Advertisements.delete(stop)}" class=""> 
         <i class="glyphicon glyphicon-remove"></i> 
         <f:ajax render=":#{waga.clientId}"/> 
        </h:commandLink>     
       </div> 
      </ui:repeat> 
     </h:panelGroup> 
    </ui:repeat> 
</h:form> 

现在,我已经试过了几个渲染ID的不同排列的,但我不明白,为什么我就不能执行对panelGroup中的Ajax请求。当使用

<h:panelGroup id="stopList" binding="#{waga}"> 
#{waga.clientId} 

我已经能够检测值,并将其唯一性地映射每个按钮的Ajax渲染到正确的容器ID IE

的ID竞选的消息-O-STOPLIST列表中的每个停止位都引用此特定的整数标识符,并且这在整个剩余消息中是一致的。

我无法弄清楚如何通过绝对或相对ID正确引用。它似乎只在panelGroup是兄弟组件时才起作用,但当然这不是我正在寻找的行为,我想重新渲染每个站点的容器以显示没有删除站点的列表。

有没有人有任何洞察力,为什么绝对id不能找到组件或我可能做错了什么?

afaik,如果你从列表/数组中删除一个元素,你需要重新渲染整个ui:repeat,因为你不能简单地从循环中取出一个迭代。

为了重新渲染整个重复,你可以这样做:

<h:form id="campaign"> 
    <ui:repeat id="messages" varStatus="messagesVarStatus" var="message" value="#{Advertisements.active.messages}" > 
     <h:panelGroup id="stopList"> 
      <ui:repeat id="temp" var="stop" value="#{message.stops}" > 
       <div class="col-sm-2"> 
        <h:outputLabel value="#{stop.name}"/> 
       </div> 
       <div class="col-sm-1"> 
        <h:commandLink action="#{Advertisements.delete(stop)}" class=""> 
         <i class="glyphicon glyphicon-remove"></i> 
         <f:ajax render="campaign:messages:#{messagesVarStatus.index}:stopList"/> 
        </h:commandLink>     
       </div> 
      </ui:repeat> 
     </h:panelGroup> 
    </ui:repeat> 
</h:form> 
+0

纠正我,如果我错了,但据我所知UI:重复不创建DOM树的成分? 无论使用这个,我只是得到错误信息 组件ID:campaign:messages:0:停止未找到 – Yveris 2014-10-21 15:10:39

+0

oops ...是的,ui:repeat不会在dom树中创建组件,但我记得在ajax执行和渲染属性中引用它们。显然,我记得错了。我改变了答案,并把panelGroup放回去了。它以这种方式工作。 – 2014-10-22 06:29:43