当按下按钮删除对象子列表中的一个元素时,我正试图使用ajax重新发送另一个对象列表中包含的对象列表的容器。但是我找不到子列表对象的父容器。
java对象是这样表示的
IE
public class Advertisements{
List<object1> messages;
//getters setters etc.
}
public class object1{
List<object2> stops;
}
现在,我尝试将一个删除按钮与每个停止(第二个嵌套对象列表)关联起来,并使用f:ajaxrender重新渲染这些停止的容器。
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或相对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>