我有一个托管bean(SessionScope如下)
@ManagedBean(name="login")
@SessionScoped
public class Login implements Serializable {
private String userSession;
public Login(){
}
}
在此managedbean中,在登录功能的某处,我将电子邮件存储为会话。
我有另一个名为ChangePassword(ViewScoped)的托管bean。我需要访问存储在userSession中的电子邮件的值。
这样做的原因是我需要在完成更改密码功能之前找出当前的userSession(电子邮件)。 (需要更改该特定电子邮件的密码)
我该怎么做? JSF的新手,感谢任何帮助!
答案 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中添加它们: