JSF - 获取SessionScoped Bean实例

时间:2010-11-25 16:00:42

标签: jsf jsf-2 facelets javabeans

我在我的网络应用程序上有这个配置。 2豆:

1°Bean - 它会检查登录信息;

@ManagedBean(name="login")
@SessionScoped
public class Login {
    private String nickname;
    private String password;
    private boolean isLogged;

    public String getNickname() { return nickname; }
    public void setNickname(String newValue) { nickname=newValue; }

    public String getPassword() { return password; }
    public void setPassword(String newValue) { password=newValue; }

    public void checkLogin() {
        ... i check on db the nickname and the password ...

        if(USER EXIST) {
            isLogged=true;
        } else {
            isLogged=false;
        }

        return true;
    }
}

2°Bean - 管理用户参数:

@ManagedBean(name="user")
@SessionScoped
public class User {
    private String name;
    private String surname;
    private String mail;

    public User() {
        String[] record=null;
        Database mydb=Configuration.getDatabase();
        mydb.connetti();
        ArrayList<String[]> db_result=null;
        db_result=mydb.selectQuery("SELECT name, surname, mail, domicilio FROM users WHERE nickname='???????'");

        int i = 0;
        while (i<db_result.size() ) {
           record=(String[]) db_result.get(i);
           i++;
        }
    }

    ... getter and setter methods...
}

正如您所看到的,我想知道如何在我的login bean上设置昵称,以便我可以在我的数据库上进行查询。

实际上我需要获取当前会话bean登录的实例:我该如何获取它?我应该使用像session.getBean("login"):)

这样的东西

希望这个问题很清楚:)

2 个答案:

答案 0 :(得分:11)

使用@ManagedProperty注入它并使用@PostConstruct在bean构造之后访问它(因为在普通构造函数中它仍然是null)。

@ManagedBean
@SessionScoped
public class User {

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

    @PostConstruct
    public void init() {
        // Put original constructor code here.
    }

    // Add/generate getters/setters and other boilerplate.
}

那就是说,这不是正确的做法。你想反过来这样做。通过UserLogin中注入@ManagedProperty(value="#{user}")并在提交操作方法期间完成工作。

您也希望将密码放在WHERE子句中。绝对没有必要将整个用户表拖入Java的内存并逐个确定。只需让DB完成工作并检查它是否返回零行或一行。

答案 1 :(得分:8)

还可以尝试使用以下代码:

    ExternalContext tmpEC;
    Map sMap;
    tmpEC = FacesContext.getCurrentInstance().getExternalContext();
    sMap = tmpEC.getSessionMap();
    login loginBean = (login) sMap.get("login");