当按钮按下删除对象子列表的元素时,我正在尝试使用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无法找到组件或我可能做错了什么?
答案 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>