Olá pessoal,
Estou fazendo um sistema de login, pra aprender um pouco sobre o JSF com Faces, me disseram que é melhor que JSP, correto?
Bom, estou trabalhando da seguinte maneira:
Tenho uma pasta com três Controllers:
MainController;
HomeController;
LoginController;
Vou mostrar o conteúdo de cada um , ficou bem simples e vou ignorar os gets e sets para ficar mais fácil de visualizar ok?
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();
}
}
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);
<ui:fragment rendered="#{loginController.isLoggedIn}">
<ui:include src="../includes/top.xhtml"/>
</ui:fragment>
<ui:insert name="body" />
<hr />
<ui:fragment rendered="#{loginController.isLoggedIn}">
<ui:include src="../includes/footer.xhtml" />
</ui:fragment>
Outra coisa, quando faço o login, sou direcionado para home.xhtml mas a URL não muda e se eu digitar na URL o caminho para home.html ele não mostra os fragments e em algumas vezes ele da um erro dizendo que não posso instanciar a classe HomController
Eu gostaria de saber também se quando eu chamo alguma página, por exemplo, home.xhtml, o Java executa o HomeController ou simplesmente abre o arquivo home.xhtml?
Alguma ideia?
Muito obrigado.