2012-04-03 8 views
0

カスタムデータをユーザーにバインドするにはどうすればよいですか? 例:ユーザーログイン>は自分が作成したリスト/アイテムのみを表示できます。カスタムデータをユーザーにバインドしますか?

エンティティユーザーオブジェクトを作成し、さらにこれらのオブジェクトで@OneToManyリストを作成する必要がありますか? 一般的に、このようなものに最適なアプローチは何ですか?

Tyvm!

答えて

0

ユーザーがログインできるシステムを持ち、自分のものがある場合は、ユーザーの種類のエンティティを使用するのが一般的です。

Itemクラスを考えてみましょう:

@Entity 
public class Item { 

    @NotNull 
    @ManyToOne 
    private User user; // plus getter + setter 

} 

次に、あなたが特定のユーザーからのアイテムのリストを取得:JSFで

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; 

そして例豆:

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; 
    } 
} 
+0

これは実際に始めるのに本当に役立ちます。 tyvm !! - もう一つ質問:私がアイテムを永続させるとき、明白な範囲のユーザーは既に設定されていなければなりません。ユーザーを設定するにはどうすればよいですか?代わりに、ログインが行われたときにユーザーを保存するにはどうしたらいいですか? @Stateful UserManagerを使用してアイテムを永続化するときにこのユーザーを取得しますか? – membersound

+0

@ mememound UserオブジェクトをHttpSessionに格納するか、セッションスコープのJSF Beanを使用できます。サーブレットAPI(web.xmlファイルのログイン設定)の標準的なセキュリティー・メカニズムを使用している場合は、自分のコードに表示されているようにユーザー名を取得できます: 'externalContext.getUserPrincipal()。getName()' –

0

あなたは各エンティティに「作成者」属性を追加して、現在のユーザーによって作成されたエンティティのみを表示できます。

List<SomeEntity> entities = session.createCriteria(SomeEntity.class) 
      .add(Restrictions.eq("author", currentUser)).list(); 
関連する問題