JSF/Primefaces—创建用于操作集合的页面的正确方法<;B>;存储在实体A中

JSF/Primefaces—创建用于操作集合的页面的正确方法<;B>;存储在实体A中,jsf,jsf-2,primefaces,datatable,entity,Jsf,Jsf 2,Primefaces,Datatable,Entity,表B具有表a的外键。 通过将JSF和Primefaces与NetBeans结合使用,我自动生成了实体、控制器、外观和JSF页面。 实体A拥有实体B的集合 @OneToMany(cascade = CascadeType.ALL, mappedBy = "idA") private Collection<B> BCollection; @OneToMany(cascade=CascadeType.ALL,mappedBy=“idA”) 私人收藏; 我需要实现一个包含2个数据表的页面

表B具有表a的外键。 通过将JSF和Primefaces与NetBeans结合使用,我自动生成了实体、控制器、外观和JSF页面。 实体A拥有实体B的集合

@OneToMany(cascade = CascadeType.ALL, mappedBy = "idA")
private Collection<B> BCollection;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“idA”)
私人收藏;
我需要实现一个包含2个数据表的页面。数据表A包含表A中的所有项目

<p:dataTable id="datalist" widgetVar="datalist" value="#{AController.items}" var="item"
                             selectionMode="single" selection="#{AController.selected}"
                             paginator="true"
                             rowKey="#{item.id}"
                             rows="5"
                             rowsPerPageTemplate="5,10,15,20,25"
                             >

数据表B必须包含与所选A项相关的所有B项。 我试过:

<p:dataTable id="datalistMOC" widgetVar="datalistMOC" value="#{AController.selected.BCollection}" var="itemMOC"
                             selectionMode="single" selection="#{BController.selected}"
                             paginator="true"
                             rowKey="#{itemMOC.id}"
                             rows="5"
                             rowsPerPageTemplate="5,10,15,20,25"
                             >

但使用这种解决方案,datatable B上的每个插入、删除和更新操作都会反映在数据库中,而不会反映在页面中

是否存在一种简单的方法来完成此行为


编辑:为什么数据表A在执行删除、插入或编辑操作后自动更新,而数据表B需要手动更新?也许我必须用B控制器来处理它?缺少什么?

每次执行插入、删除或更新操作时,应使用post get重定向模式导航回页面。因此,在backingbean操作方法的末尾,您应该有一行类似的代码:

return "/pageWithTablesAandB?faces-redirect=true";

谢谢你的回答。我不确定这是不是最好的解决方案。表A是自动更新的,为什么我不能在表B上得到相同的结果?我认为我的错误是直接从实体bean访问集合。您用于访问B子实体的方式似乎是正确的。请记住,删除B实体时,除了执行JPA删除操作外,还必须更新模型,从a父实体的BCollection属性中删除此元素。或者你可以按照我在最初的回答中建议的那样刷新整个模型。谢谢。明天我会试试你的解决方案。同时我编辑了这个问题。我明天会检查它。我会告诉你的。@BalusC是的,托管bean是会话作用域。@BalusC我认为作用域不是问题,否则我的web应用程序中的所有其他数据表在每次插入、删除或更新操作后都不会更新。@BalusC当然不会!很抱歉,但我不明白这与我的问题有什么关系。发布MCVE后,问题中有太多的歧义。