Jsf Primefaces数据表+;带更新组件的行扩展
我有一个datatable,它有一个在页面加载时初始化的对象集合。它不是懒洋洋的 在这个datatable行中,我有一个行扩展对象,我希望根据该行中对象的布尔值(Primefaces中的inputSwitch标记)对其进行“切换”。切换后,我更新DOM并使用行扩展的“rendered”属性呈现子集合(我怀疑这可能是问题所在,因为我认为这需要DOM刷新) 但是,每当我点击第一个inputSwitch(主开关)时,它就会重新加载整个集合并清除所做的更改Jsf Primefaces数据表+;带更新组件的行扩展,jsf,primefaces,joinfaces,Jsf,Primefaces,Joinfaces,我有一个datatable,它有一个在页面加载时初始化的对象集合。它不是懒洋洋的 在这个datatable行中,我有一个行扩展对象,我希望根据该行中对象的布尔值(Primefaces中的inputSwitch标记)对其进行“切换”。切换后,我更新DOM并使用行扩展的“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
@组件
@视域
公共类MyBean实现了可序列化
{
私有静态最终长serialVersionUID=1L;
私有列表所有对象;
私有列表筛选器对象;
公共MyBean(@Value(“#{param['id']}”)字符串selectedId)
{
init();
}
私有void init()
{
allObjects=…//从数据库获取对象的调用
}
//二传手和接球手
}我将添加豆子。它是视图范围(Joinfaces).另外-JSF 2.2和Primefaces 6.2仅供参考您是正确的,
renderered
属性需要DOM刷新。对于您复杂的用例,您可能必须使用Jquery并使用JavaScript执行此操作,将状态保留在客户端,然后使用JS代码删除行切换程序。当然,我会尽快跟进卡尼会加入豆子。它是视图范围(Joinfaces).另外-JSF 2.2和Primefaces 6.2仅供参考您是正确的,renderered
属性需要DOM刷新。对于您复杂的用例,您可能必须使用Jquery并使用JavaScript执行此操作,将状态保留在客户端,然后使用JS代码删除行切换程序。当然,我会尽快跟进可以