【问题标题】:Acces one managed bean from another by @ManagedProperty通过 @ManagedProperty 从另一个访问一个托管 bean
【发布时间】:2013-02-27 13:51:22
【问题描述】:

我有 2 个 jsf 页面和每个 2 个 bean。 第一个页面是登录页面,用户输入他的登录密码,然后他重定向到他的邮箱页面。我想从登录页面获取数据到邮箱页面。

我的登录页面 bean:

@ManagedBean(name = "login")
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@RequestScoped
public class LoginFormBean {

    @EJB
    private LoginService loginService;

    private String email;

    private String password;

    public String getEmail() {
        return email;
    }

    public String getPassword() {
        return password;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String login() {
        if (loginService.loginUser(email, password))
          return "mailBox.xhtml?faces-redirect=true";
        else return "";
    }

}

邮箱页面的我的bean:

@ManagedBean(name = "mailBox")
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@RequestScoped
public class MailBoxFormBean {

    @ManagedProperty(value = "#{login}")
    private LoginFormBean login;

    private String email = login.getEmail();

    public void setLogin(LoginFormBean login) {
        this.login = login;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }
}

但是当我重定向到邮箱页面时,登录 bean 为空,我无法从中获取数据。 我做错了什么?

我看过很多教程和答案(例如, Using @ManagedProperty to call method between Managed beanshttp://www.techartifact.com/blogs/2013/01/access-one-managed-bean-from-another-in-jsf-2-0.html )

我做的完全一样,但它不适合我。

【问题讨论】:

    标签: jsf managed-bean


    【解决方案1】:

    问题是你的login bean 被标记为@RequestScoped,所以一旦你重定向离开登录页面,这个值就会被丢弃。请改用@SessionScoped:这通常是用户登录信息的正确范围。

    【讨论】:

      猜你喜欢
      • 2011-11-04
      • 1970-01-01
      • 2012-09-03
      • 2012-03-24
      • 2011-07-07
      • 1970-01-01
      • 2012-12-26
      • 2016-12-26
      • 1970-01-01
      相关资源
      最近更新 更多