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

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?