我正在开发一个Java EE应用程序,用户可以在其中注册一些单元。我希望当用户登录时,每个单元都显示在一个单独的选项卡上。
<p:tabView id="unitTabs" cache="false" var="unit" value="#{getUnitsOfLoggedInUser(loginController.checkedUser)}">
<p:tab id="unitTab" title="#{unit.unitName}">
//content here
</p:tab>
</p:tabView>
在支持bean中我有这个方法
public List<Unit> getUnitsOfLoggedInUser(User user) {
unitsOfLoggedInUser = (List<Unit>) user.getUnitCollection();
return unitsOfLoggedInUser;
}
但是,如果用户创建新单元,则不会立即呈现新选项卡。即使我刷新页面,它仍然不会显示。但是,如果我重新启动服务器并再次运行,则新选项卡将在那里。它似乎有一些缓存属性,并且不会在每次调用时加载。
此外,当我调试代码时,方法getUnitsOfLoggedInUser(user)
在呈现页面之前被调用多次。
我也尝试过使用JSF数据表,但它的行为相同,所以它不是Primefaces库的问题
有没有人有任何建议我该如何解决这个问题?感谢
答案 0 :(得分:3)
答案取决于您保存新单位的方式。一种选择是在保存新单元后刷新user
实体。无论如何你可以做到
em.refresh(user);
保存后,其中em
是EntityManager
的实例。
更新
您还可以将新单元添加到用户的集合中,然后合并/编辑用户,而不是直接创建新单元。然后,您不需要刷新用户,因为您手动将该单元添加到集合中。