我創建了一個登錄示例來看看面對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