0

アクティブなユーザー (アクティブなセッションを持つユーザー) を一覧表示する機能を JSF 2 アプリケーションに追加しようとしました。このために、アプリケーション スコープのマネージド Bean を使用してユーザーのリストを保存し、ログインが成功するまでにそれぞれを追加することにしました。次に、jsf ページから (アプリケーション スコープのマネージド Bean に保存されている) アクティブなユーザー リストにアクセスします。ただし、次の問題を解決する方法を理解できた場合に限ります。

アプリケーション スコープ Bean : AppBean.java

@ManagedBean(name = "appBean")
@ApplicationScoped
public class AppBean implements java.io.Serializable {

    private List<User> connectedUsers = new ArrayList<User>();

    public AppBean() {
    }

    public List<User> getConnectedUsers() {
        return connectedUsers;
    }

    public void setConnectedUsers(List<User> connectedUsers) {
        this.connectedUsers = connectedUsers;
    }  
}

ログイン Bean:

@Named(value = "loginBean")
@SessionScoped
public class LoginBean implements Serializable {

    @ManagedProperty("#{appBean}")
    private AppBean appBean;

    private User userInSession;

    public LoginBean() {
    }

    public String authenticate() {
        if (this.authClearsOut()) {
            if (appBean != null)
                appBean.getConnectedUsers().add(userInSession);
            else System.out.println("appBean = null !!!!");
            return "/next_screen.xhtml?redirect=true";
        }
        else return "/login.xhtml?authentication=failed";
    }

    public AppBean getAppBean() {
        return appBean;
    }

    public void setAppBean(AppBean appBean) {
        this.appBean = appBean;
    }
}

ここで 2 つの問題があります。1) LoginBean.java の 6 行目をプライベート AppBean appBean = new AppBean(); に変更しない限り、appBean は null です。2) ユーザー userinSession が (List) connectedUsers に追加されることはありません。

ここで何が問題なのですか?

4

1 に答える 1

1

JSF@ManagedPropertyアノテーションは JSF@ManagedBeanでのみ機能し、 CDI では機能しません@Named

を代わりにLoginBeanJSF で管理するように変更するか、 Bean を CDI で管理するように変更してから の代わりに使用します。@ManagedBeanAppBean@Named@Inject@ManagedProperty

于 2012-05-14T15:15:08.990 に答える