如何解决Primefaces 数据表 + 带有更新组件的行扩展
我有一个数据表,其中包含在页面加载时初始化的对象集合。它不是懒加载。
在此数据表行中,我有一个行扩展对象,我希望根据该行中对象的布尔值(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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。