我有一個JSF管理的會話範圍豆包含跟蹤的實體,例如,通過認證的用戶:無法刷新JPA 2實體注入到JSF 2託管Bean
@ManagedBean
@SessionScoped
public class LoginController implements Serializable {
User user;
public User getUser() {
return this.user;
}
public void setUser(User user) {
this.user = user;
}
/* ... */
}
在另一個bean我有注入用戶使用它來檢索角色列表中的關聯有了它,像這樣:
@ManagedBean
@ViewScoped
public class AnotherController implements Serializable {
List<Role> roles;
@ManagedProperty(value="#{loginController.user}")
User user;
public someMethod() {
/* Some stuff that insert other roles into database, referring the user as owner */
roles = user.getRolesList();
}
}
如果我更新使用someMethod
AJAX頁面時,roles
名單仍然沒有重新加載。 如果我插入em.refresh(user)
user.getRolesList
之前,我得到這個錯誤:
Can not refresh not managed object: model.User[ id=1 ].
誰能幫助我理解?爲什麼會話範圍的實體如果注入另一個bean,就不會被管理?我怎樣才能解決這個問題? 謝謝。
+1有一個很好的解釋。我會親自去使用帶有後端'@EJB'服務的分離對象來完成合並作業。或者,如果OP不想處理EJB,則會使用ORM,例如Hibernate,並以編程方式處理事務。 – skuntsel 2013-02-25 10:13:14
對不起,但我是新來的Java世界,現在我使用jsf有點'開箱',所以我不是很確定理解了解釋,我該如何解決練習問題? – 2013-02-25 10:43:30
我認爲以這種方式解決了我的問題:'user = em.find(user.getClass(),user.getId());' – 2013-02-25 11:20:17