Jsf Primefaces数据表+;带更新组件的行扩展

Jsf Primefaces数据表+;带更新组件的行扩展,jsf,primefaces,joinfaces,Jsf,Primefaces,Joinfaces,我有一个datatable,它有一个在页面加载时初始化的对象集合。它不是懒洋洋的 在这个datatable行中,我有一个行扩展对象,我希望根据该行中对象的布尔值(Primefaces中的inputSwitch标记)对其进行“切换”。切换后,我更新DOM并使用行扩展的“rendered”属性呈现子集合(我怀疑这可能是问题所在,因为我认为这需要DOM刷新) 但是,每当我点击第一个inputSwitch(主开关)时,它就会重新加载整个集合并清除所做的更改

我有一个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代码删除行切换程序。当然,我会尽快跟进可以