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>
纠正我,如果我错了,但据我所知UI:重复不创建DOM树的成分? 无论使用这个,我只是得到错误信息 组件ID:campaign:messages:0:停止未找到 – Yveris 2014-10-21 15:10:39
oops ...是的,ui:repeat不会在dom树中创建组件,但我记得在ajax执行和渲染属性中引用它们。显然,我记得错了。我改变了答案,并把panelGroup放回去了。它以这种方式工作。 – 2014-10-22 06:29:43