f:嵌套ui中的ajax:repeat

时间:2014-10-17 20:32:12

标签: ajax jsf-2 uirepeat

当按钮按下删除对象子列表的元素时,我正在尝试使用ajax重新呈现另一个对象列表中包含的对象列表的容器。但我无法找到子列表对象的父容器。

java对象如此表示 IE

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

public class object1{
     List<object2> stops;
}

现在我正在尝试将删除按钮与每个停靠点(第二个嵌套对象列表)相关联,并使用f:ajax render重新渲染这些停靠点的容器。

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排列,但我无法弄清楚为什么我不能在面板组上执行ajax请求。

使用时

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

我已经能够检查该值并且它为每个按钮的ajax呈现唯一的映射到正确的容器ID IE

对于id campaign-messages-0-stopList列表中的每个停靠点引用此特定的整数标识符,这在其余消息中是一致的。

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

有没有人知道为什么绝对ID无法找到组件或我可能做错了什么?

1 个答案:

答案 0 :(得分: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>