8

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

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

   private String userSession;
   public Login(){
   }
}

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

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

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

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

4

4 回答 4

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)
    }

    // ...
}

也可以看看:

于 2012-09-10T18:24:05.143 回答
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 的名称。

于 2012-09-10T18:02:44.710 回答
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 (){
   }
}
于 2012-09-11T07:05:48.933 回答
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 中:

于 2015-03-14T12:55:04.937 回答