Opa, beleza? pois então fiz um curso aqui na alura de jsf e logo depois me deparei com o maven e cdi e tudo mais e gostei muito, e agora não acostumo começar um projeto sem eles, só que agora com o meu cdi acho que pode estar dando algum problema, porque eu queria fazer uma tela de login, no entando eu ja tenho essa tela feita.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:composition template="/template/template.xhtml">
<ui:define name="conteudo">
<h:form id="formularioUsuario">
<p:growl life="6000" />
<p:fieldset legend="Usuario">
<p:outputLabel value="Insira o login e a sua senha" />
<h:panelGrid columns="2">
<p:outputLabel value="Loguin: " for="loguin" />
<p:inputText id="loguin" value="#{usuarioBean.usuario.login}" />
<p:outputLabel value="Senha: " for="senha" />
<p:password id="senha" value="#{usuarioBean.usuario.senha}" />
<br />
<p:commandButton value="Loguin"
action="#{usuarioBean.verificarLoginn}" update="formularioUsuario" />
</h:panelGrid>
</p:fieldset>
</h:form>
</ui:define>
</ui:composition>
</html>
Minha página, no meu componente botão eu até errei o nome de proposito do meu metodo, colocando um n a mais no meu login, porque sempre que eu clicava nele ele não me retorna nada ai testei trocando o nome do metodo errando de proposito e nem o erro da pagina aconteceu dizendo que está errado.
Classe bean
@SuppressWarnings("serial")
@Named
@SessionScoped
public class UsuarioBean implements Serializable{
@Inject
private Usuario usuario;
@Inject
private UsuarioDao usuarioDao;
@Transacional
public String verificarLogin() {
FacesContext context = FacesContext.getCurrentInstance();
boolean verificar = usuarioDao.verificar(usuario);
if(verificar) {
context.getExternalContext().getSessionMap().put("usuarioLogado", this.usuario);
System.out.println("Com sucesso!" + usuario.getLogin());
this.usuario.setAcesso(true);
return RedirecionadorDePaginas.redirecionador("principal.xhtml");
} else {
MensagemUtil.mensagemError("Usuario ou senha incorretos");
this.usuario = new Usuario();
return null;
}
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}
@SuppressWarnings("serial")
public class UsuarioDao implements Serializable{
@Inject
private EntityManager manager;
public void adicionar(Usuario usuario) {
manager.persist(usuario);
}
@SuppressWarnings("unused")
public boolean verificar(Usuario usuario) {
TypedQuery<Usuario> query = manager.createNamedQuery("Select u from Usuario u where u.login = :pLogin and u.senha =:pSenha", Usuario.class);
query.setParameter("pLogin", usuario.getLogin());
query.setParameter("pSenha", usuario.getSenha());
try {
Usuario singleResult = query.getSingleResult();
} catch(NoResultException e) {
return false;
}
return true;
}
}
e no meu faces-config.xml
<lifecycle>
<phase-listener>
br.com.bercalini.testeUtil.Autorizador
</phase-listener>
</lifecycle>
Mais no projeto que inicei aqui e terminei na alura é a mesma tela de login a mesmo logica de programação e nela da tudo certo, agora usando cdi não da, alias quando coloco no meu faces-config.xml o codigo acima o meu projeto pode apertar qualquer botão nas paginas que não acontece nada, mais se tirar novamante a linha do código que é essa.
<lifecycle>
<phase-listener>
br.com.bercalini.testeUtil.Autorizador
</phase-listener>
</lifecycle>
Volta tudo a funcionar novamente, oque está acontecendo?