如何在另一个托管bean中访问一个托管bean的属性

时间:2012-09-10 17:53:38

标签: jsf jsf-2 parameter-passing managed-bean

我有一个托管bean(SessionScope如下)

@ManagedBean(name="login")
@SessionScoped
public class Login implements Serializable {

   private String userSession;
   public Login(){
   }
}

在此managedbean中,在登录功能的某处,我将电子邮件存储为会话。

我有另一个名为ChangePassword(ViewScoped)的托管bean。我需要访问存储在userSession中的电子邮件的值。

这样做的原因是我需要在完成更改密码功能之前找出当前的userSession(电子邮件)。 (需要更改该特定电子邮件的密码)

我该怎么做? JSF的新手,感谢任何帮助!

4 个答案:

答案 0 :(得分:17)

只需将一个bean注入另一个bean的托管属性即可。

@ManagedBean
@ViewScoped
public class ChangePassword {

    @ManagedProperty("#{login}")
    private Login login; // +setter (no getter!)

    public void submit() {
        // ... (the login bean is available here)
    }

    // ...
}

另见:

答案 1 :(得分:2)

在JSF2中,我通常使用这样的方法:

public static Object getSessionObject(String objName) {
    FacesContext ctx = FacesContext.getCurrentInstance();
    ExternalContext extCtx = ctx.getExternalContext();
    Map<String, Object> sessionMap = extCtx.getSessionMap();
    return sessionMap.get(objName);
}

输入参数是bean的名称。

答案 2 :(得分:0)

如果您的会话范围bean是这样的:

@ManagedBean(name="login")
@SessionScoped
public class Login implements Serializable {

   private String userSession;
   public Login(){
   }
}

您可以访问此bean的值,如:

@ManagedBean(name="changePassword")
@ViewScoped
public class ChangePassword implements Serializable {

   @ManagedProperty(value="#{login.userSession}")
   private String userSession;
   public ChangePassword (){
   }
}

答案 3 :(得分:0)

public static Object getSessionObj(String id) {
   return FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(id);
}

public static void setSessionObj(String id,Object obj){
   FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(id, obj);
}

在托管bean中添加它们: