1

アプリのホームページに次のスニペットがあります。

<h:panelGroup rendered="#{loginBean.loggedIn}">
    <p>Welcome, #{loginBean.currentUser.firstName}</p>
</h:panelGroup>

LoginBean は@SessionScoped. ホームページで参照されているため、ページが読み込まれると同じインスタンスが作成されます。

ここで、ユーザーがログインしないと仮定します。その場合、ユーザーに関する情報が保持されないため、LoginBean は役に立ちません。これは冗長ではないでしょうか?

これが問題を引き起こすと言っているわけではありませんが、不必要なインスタンス化がメモリ スペースを占有していることについて疑問に思っているだけです。

4

1 に答える 1

1

リクエスト#{loginBean}/ビューのスコープを設定し、ログインが成功したときにユーザーを手動でセッションスコープに配置します。セッションスコープは、によってマップとして使用できますExternalContext#getSessionMap()

@ManagedBean
@ViewScoped
public class LoginBean {

    public void login() {
        // ...

        if (user != null) {
            externalContext.getSessionMap().put("user", user);
        }

        // ...
    }

}

このようにあなたは逃げることができます

<h:panelGroup rendered="#{not empty user}">
    <p>Welcome, #{user.firstName}</p>
</h:panelGroup>

参照:

于 2013-01-08T12:59:17.180 に答える