1

我正在开发一个 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>

在backing bean中我有这个方法

public List<Unit> getUnitsOfLoggedInUser(User user) {
    unitsOfLoggedInUser = (List<Unit>) user.getUnitCollection();
    return unitsOfLoggedInUser;
}

但是,如果用户创建一个新单元,则不会立即呈现新选项卡。即使我刷新页面,它仍然不显示。但是,如果我重新启动服务器并再次运行,新选项卡将在那里。似乎它具有一些缓存属性,并且不会在每次调用时加载。

此外,当我调试代码时,该方法getUnitsOfLoggedInUser(user)在页面呈现之前被多次调用。

我也尝试过使用 JSF 数据表,但它的行为相同,所以这不是 Primefaces 库的问题

有没有人有任何建议我该如何解决这个问题?谢谢

4

1 回答 1

3

答案取决于您保存新单位的方式。user一种选择是在保存新单位后刷新实体。在任何情况下你都可以

em.refresh(user);

保存后,em您的EntityManager.

更新:

您还可以将新单元添加到用户的集合中,然后合并/编辑用户,而不是直接创建新单元。然后您不需要刷新用户,因为您手动将单元添加到集合中。

于 2012-05-31T09:34:29.450 回答