我正在创建一个登录示例来查看带有 Faces 的 JSF,我有 PHP 背景,所以我遇到了很多困难。
这就是我的工作方式,基于一些谷歌搜索。
我有一个包含 3 个控制器的文件夹:
主控制器;家庭控制器;登录控制器;
我将在没有 get 和 set 的情况下展示每个 bu,以使其更易于阅读。
主控制器:
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;
}
}
}
家庭控制器:
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();
}
}
登录控制器:
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";
}
}
因此,阅读一些页面我发现了这种创建会话的方式,如果它是正确的,请不要拒绝:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("loginController", this);
发生的情况是在 HomeController 我检查会话状态,如果错误重定向到login.xhtml
另一件事,当我登录时,我被重定向到home.xhtml但 url 仍然打开login.xhtml
,当我将其更改为它时,home.xhtml
它返回给我这个美丽的错误:
Cant instantiate class: com.erp3.gui.controllers.HomeController.
我还想知道,当我调用home.xhtml文件时,它会加载HomeController还是 Java 只是加载home.xhtml?