我有一个数据表,其中包含在页面加载时初始化的对象集合。它不是延迟加载的。
在这个数据表行中,我有一个行扩展对象,我希望根据该行中对象的布尔值“切换”(Primefaces 中的 inputSwitch 标记)。一旦切换,我更新 DOM 并使用 rowExpansion 的“rendered”属性渲染子集合(我怀疑这可能是问题,因为我认为这需要刷新 DOM)
但是,每当我点击第一个 inputSwitch(主切换)时,它都会重新加载整个集合并清除所做的更改。
<p:dataTable
id="myTable"
var="row"
reflow="true"
expandedRow="true"
filteredValue="#{mybean.filteredAllObjects}"
value="#{mybean.allObjects}">
<p:column>
<p:inputSwitch value="#{row.boolSelected}">
<p:ajax update=":myform:myTable"/>
</p:inputSwitch>
</p:column>
<p:rowExpansion rendered="#{row.boolSelected}">
<ui:repeat value="#{row.subsetCollection}" var="subsetRow">
<p:inputSwitch value="#{subsetRow.boolSelected}"/>
</ui:repeat>
</p:rowExpansion>
</p:dataTable>
我怎样才能基本上在客户端保持集合的状态而不需要重新渲染集合(从而消除所有更改)?
编辑
支持 bean(简化 - 这真的很简单)。当在前端进行 ajax 调用时,将调用集合的 getter(断点确认这一点)。还看到一个 POST 正在发生,所以调用了服务器:
@Component
@ViewScoped
public class MyBean implements Serializable
{
private static final long serialVersionUID = 1L;
private List<MyObject> allObjects;
private List<MyObject> filteredAllObjects;
public MyBean(@Value("#{param['id']}") String selectedId)
{
init();
}
private void init()
{
allObjects = ... // call to get objects from DB
}
// Setters & Getters
}