2012-02-20 22 views
1

私のアプリケーションにログインしているユーザーを追跡する必要があり、JSF2のapplicationMapを使用してこれを実行しようとしています。だから私は、ユーザーのリストを作成し、私のログイン豆に私はこれを行うことによって、ユーザーを(削除)を追加:私はこのようなリストを取得しようusersTracking.xhtmlページのバッキングBeanでアプリケーション内のユーザーの追跡

FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().put("usersList", usersList); 

を:

AppllicationMap map = (ApplicationMap)FacesContext.getCurrentInstance().getExternalContext().getApplicationMap(); 
List users = (LinkedList)map.get("usersList"); 

ただし、「ユーザー」は常にnullになります。私は間違って何をしていますか?

+1

あなたが直接put操作の後にget操作を実行した場合はどうなりますか? –

+0

ありがとうマット、私は愚かな間違いをしました。とにかく私はデータベースを介してこれを行うだろうと思うので、私はアプリケーションのいくつかのインスタンスを実行している場合のためのapplicationMapのソリューションがあるとは思わない。 – Herzog

答えて

3

アプリケーションスコープのマネージドBeanにするだけです。

@ManagedBean(eager=true) 
@ApplicationScoped 
public class Users { 

    private List<User> list; 

    public Users() { 
     list = new LinkedList<User>(); 
    } 

    public List<User> getList() { 
     return list; 
    } 

} 

あなたは@ManagedPropertyにより、すべての任意の管理対象Beanにそれを注入してアクセスすることができますこの方法は:

@ManagedBean 
@ViewScoped 
public class ArbitraryBean { 

    @ManagedProperty("#{users}") 
    private Users users; 

    // ... 
} 
+0

ありがとう、BalusC。しかし、それはアプリケーションのいくつかのインスタンス全体で動作しますか? – Herzog

+2

いいえ、あなたの最初のアプローチもそうではありません。私はあなたの初期のアプローチのより簡単で信頼性の高い方法を提供していました。アプリケーションの複数のインスタンスにわたって機能するようにするには、この情報を共有DBに格納する必要があります。 – BalusC

+0

OK。はい、私は質問を投稿したときに私はそれについて考えなかった。私はDBを通してやっています。しかし、あなたの提案はおそらく、他の種類の値、定数などを保存するときに役に立ちます。ありがとう:) – Herzog

関連する問題