2014-10-17 61 views
0

我試圖使用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不能找到組件或我可能做錯了什麼?

回答

0

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