0
如何將自定義數據綁定到用戶? 例如:用戶登錄>只能看到他自己創建的列表/項目。將自定義數據綁定到用戶?
我是否必須創建一個實體用戶對象,並進一步使這些對象包含@OneToMany列表? 或者對於像這樣的事情最好的方法是什麼?
Tyvm!
如何將自定義數據綁定到用戶? 例如:用戶登錄>只能看到他自己創建的列表/項目。將自定義數據綁定到用戶?
我是否必須創建一個實體用戶對象,並進一步使這些對象包含@OneToMany列表? 或者對於像這樣的事情最好的方法是什麼?
Tyvm!
如果您有一個系統,用戶可以登錄並擁有自己的東西,那麼擁有用戶類型的實體是很常見的做法。
考慮一個Item
類:
@Entity
public class Item {
@NotNull
@ManyToOne
private User user; // plus getter + setter
}
然後你從一個特定的用戶獲得的項目清單:
String query = "SELECT i FROM Item i WHERE i.user = :user";
List<Item> items = entityManager.createQuery(query)
.setParameter("user", user) // where 'user' is the current user
.getResultList;
而且在JSF的例子豆:
public class ItemsBean implements Serializable {
private User user;
private List<Item> items;
public User getUser() {
if (user == null) {
ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
Principal principal = ctx.getUserPrincipal();
user = ... // load user: username = principal.getName()
}
return user;
}
public List<Item> getItems() {
if (items == null) {
User user = getUser();
List<Item> = ... // load items as shown above
}
return items;
}
}
你可以爲每個實體添加一個「作者」屬性,並僅顯示當前用戶創建的實體:
List<SomeEntity> entities = session.createCriteria(SomeEntity.class)
.add(Restrictions.eq("author", currentUser)).list();
這真的對上手很有幫助。 tyvm! - 還有一個問題:當我堅持一個項目時,明顯的用戶必須已經設置。我如何設置用戶?或者更確切地說:如何在登錄發生時存儲用戶?我只需要一個@Stateful UserManager,並在持久化項目時檢索此用戶? – membersound 2012-04-04 10:13:09
@membersound您可以將User對象存儲在HttpSession中,或使用會話作用域的JSF bean。如果你使用Servlet API的標準安全機制(web.xml文件中的登錄配置),那麼你可以得到如我的代碼所示的用戶名:'externalContext.getUserPrincipal()。getName()' – 2012-04-04 20:48:10