1

我的应用程序主页上有以下代码段:

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

登录豆是@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 回答