我创建了一个登录示例来看看面对JSF的JSF,我有一个PHP背景,所以我有很多困难。JSF登录会话和重定向
这是我工作的基础上,一些谷歌搜索。
我有3个控制器的文件夹:
MainController; HomeController; LoginController;
我会显示每一个BU没有得到,并设置,使其更容易阅读。
MainController:
package com.erp3.gui.controllers;
import javax.faces.context.FacesContext;
public class MainController {
public LoginController loginController;
public MainController() {
this.checkUserSession();
}
public String checkUserSession() {
loginController = (LoginController) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("loginController");
if (!loginController.getIsLoggedIn()) {
return "login.html";
} else {
return null;
}
}
}
的HomeController:
package com.erp3.gui.controllers;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
public class HomeController extends MainController {
public String username;
public HomeController() {
super();
}
}
的LoginController:
package com.erp3.gui.controllers;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
@ManagedBean
public class LoginController {
public Boolean isLoggedIn = false;
private String username;
private String password;
private FacesMessage msg;
public String login() {
if (this.getUsername().equals("daniel") && this.getPassword().equals("123")) {
this.isLoggedIn = true;
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("loginController", this);
return "home.html";
} else {
this.isLoggedIn = false;
msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Usuário ou senha inválida.", username);
FacesContext.getCurrentInstance().addMessage(null, msg);
return "login.html";
}
}
public String logOut() {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("loginController");
return "login.html";
}
}
所以,在阅读小号青梅页,我发现创建一个会话这样,如果它是正确的不NO:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("loginController", this);
发生什么事是对的HomeController我检查会话状态,如有虚假重定向login.xhtml
另一件事,当我登录,我重定向到home.xhtml但网址仍然在login.xhtml
,当我将其更改为home.xhtml
它返回我这个美丽的错误:
Cant instantiate class: com.erp3.gui.controllers.HomeController.
我也想知道,当我打电话给我的home.xhtml文件,它加载的HomeController或Java简单地加载home.xhtml?
如果当我调用HomeController的home.html页面时,你能解释一下吗? – Gerep 2012-04-26 16:39:22
取决于它是否被home.xhtml中的'#{homeController}'引用,或者被其他托管bean隐式地作为托管属性。我建议只阅读一本体面的JSF书籍,而不是在互联网上拼凑一些松散的片段。 – BalusC 2012-04-26 16:39:43
你有链接,我可以找到一些关于如何纠正我的方法的好内容? – Gerep 2012-04-26 16:42:13