来自辅助bean的动态内容未在视图中立即更新

时间:2012-05-31 09:18:37

标签: jsf jpa primefaces

我正在开发一个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库的问题

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

1 个答案:

答案 0 :(得分:3)

答案取决于您保存新单位的方式。一种选择是在保存新单元后刷新user实体。无论如何你可以做到

em.refresh(user);
保存后

,其中emEntityManager的实例。

更新

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