1

我有一个数据表,其中包含在页面加载时初始化的对象集合。它不是延迟加载的。

在这个数据表行中,我有一个行扩展对象,我希望根据该行中对象的布尔值“切换”(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

}

4

0 回答 0