我正在开发一个简单的项目云,登录后注册的用户可以在其中下载和上传文件。我正在使用Eclipse Java EE,JSF和Hibernate进行开发。在我的项目中,我可以登录到用户,如果数据正确,我可以打开用户菜单,但无法确定在哪里存储有关已登录用户的信息。尚不清楚会话的概念。我已经阅读了一些有关Hibernate和会话的内容,但我还不了解。我至少需要保留当前登录用户的用户名,使用什么对象?在哪里?你可以帮帮我吗?谢谢
@ManagedBean @SessionScoped public class Login { private String userId; private String password; public Login() {} public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String loginUser (){ SessionHandler s = new SessionHandler(); Session sessione = s.getDb(); sessione.beginTransaction(); Query query = sessione.createQuery( "Select password from Utenti where username= :id" ); System.out.println("Qui lo prende: " + this.getUserId()); query.setParameter("id", userId); System.out.println("tag debug"); List<Utenti> res= query.list(); if(password.equals(res.get(0))){ this.setUserId(userId); return "first"; } else return "noaccess"; }
我需要在TreeBean中使用userid。这是我的TreeBean:
@ManagedBean @SessionScoped public class TreeBean { @ManagedProperty(value="#{login.userId}") private String user; private TreeNode root; private TreeNode selectedNode; private Session db; public Session getDb() { return db; } public void setDb(Session db) { this.db = db; } public void setUser(String user) { this.user = user; } public String getUser(){ return user; } public TreeBean() { root=new DefaultTreeNode("Root", null); System.out.println("Prova"+ user); recursive(0, root); }
在.xhtml中,文件可以读取userid,而不会出现任何问题。为什么?谢谢
您需要创建一个会话范围的ManagedBean。登录时,您可以在该ManagedBean中设置用户对象(从数据库获取)。然后,您将可以通过所有应用程序访问它。
另一种方法是直接在会话中设置用户对象:
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); Map<String, Object> sessionMap = externalContext.getSessionMap();
然后:
sessionMap.put("attributeName", whateverYouWantToSaveInSession);
但是我会选择第一种方法。