kenneth
Novembro 27, 2011, 8:46pm
#1
Pessoal, boa noite.
Ja vi alguns topicos do GUJ com os termos que pus no titulo, mas ainda nao consegui chegar a uma solucao.
Criei algumas paginas XHTML, e estava funcionando (com Primefaces), os componentes eram renderizados normalmente.
Mas implementei uma validacao de sessao com filtros, e dentro dele, fiz um forward pra pagina de login (/login.xhtml).
A partir dai, as minhas paginas nao funcionam mais.
Ja parei o tomcat, gerei o projeto novamente, etc e tal.
As outras pessoas que tiveram esse problema, era relacionado a JAR’s que faltavam ou a indicacao do /faces/ na URL.
No meu caso, estava funcionando (apesar de que algumas paginas que crio apresentarem o mesmo problema).
Quando executo o projeto, a tela fica em branco. E olhando o codigo fonte, os componentes estao la, mas na forma como esta meu arquivo fonte (<p:inputText…> etc).
Alguem ja passou por algo? Ou sabe o porque disso?
Obrigado.
poste o cod de validacao que vc criou e que começou a dar erro a patir dele.
kenneth
Novembro 28, 2011, 5:56am
#3
Desculpe, esqueci disso:
Filtro - ValidaSessao.java
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
System.out.println("Cheguei no filtro...");
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
if (!this.validar((HttpServletRequest) req)) {
request.getRequestDispatcher(PAGINA_DE_LOGIN).forward(req, res);
} else {
//Desativa o cache do browser
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
//Processa request e response
chain.doFilter(req, res);
}
System.out.println("Sai do filtro...");
}
web.xml
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<filter>
<filter-name>VerificaSessao</filter-name>
<filter-class>filtro.ValidaSessao</filter-class>
</filter>
<filter-mapping>
<filter-name>VerificaSessao</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
login.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Masotti - Identificação</title>
<link rel="stylesheet" type="text/css" href="css/base.css" />
<link rel="icon" href="img/dexter.ico" type="image/ico" />
</h:head>
<body>
<f:view>
<div id="blocoLogin">
<h:form id="frm" prependId="false">
<p:messages showDetail="false" />
<h:panelGrid id="telaLogin" columns="2">
<h:outputLabel styleClass="rotulo" for="login" value="Usuário" />
<h:panelGroup>
<p:inputText size="30" id="login" value="#{loginController.usuario.login}" styleClass="entrada" required="true" requiredMessage="Informe o usuario"/>
<p:message for="login" showDetail="true" />
</h:panelGroup>
<h:outputLabel styleClass="rotulo" for="senha" value="Senha:" />
<h:panelGroup>
<p:password feedback="false" id="senha" value="#{loginController.usuario.senha}" size="30" minLength="10" styleClass="entrada" required="true" requiredMessage="Informe a senha" />
<p:message for="senha" />
</h:panelGroup>
<h:outputLabel styleClass="rotulo" for="blogin" />
<p:commandButton id="blogin" value=" Entrar " ajax="false" actionListener="#{loginController.doLogin}" />
<h:outputLabel for="esqueciSenha" />
<p:commandLink ajax="false" value="Esqueci a senha" id="esqueciSenha" action="/recuperarSenha.xhtml" />
</h:panelGrid>
</h:form>
</div>
</f:view>
</body>
</html>
loginController.java
package controller;
import dao.Dao;
import entidade.Usuario;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
@ManagedBean(name = "loginController")
@SessionScoped
public class LoginController {
private Usuario usuario;
public LoginController() {
this.usuario = new Usuario();
}
public void doLogin() {
Dao dao = new Dao();
Criterion criterioLogin[] = new Criterion[2];
criterioLogin[0] = Restrictions.eq("login", this.usuario.getLogin());
criterioLogin[1] = Restrictions.eq("senha", this.usuario.getSenha());
List resultado = dao.listarCondicional(Usuario.class, criterioLogin);
Usuario usuarioLogado = null;
if (resultado.isEmpty() ||
resultado.size() != 1) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,
"Usuario e/ou senha invalidos",
"Informe corretamente os dados e tente novamente"));
} else {
usuarioLogado = (Usuario) resultado.get(0);
}
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
session.setAttribute("usuarioLogado",usuarioLogado);
System.out.println("Coisado...");
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}
Obrigado
Como que você está chamando seu link?
Tipo: http://localhost:8080/projeto/asd.jsf ?
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
Tente tirar essas propriedades e testar. Uma vez tive o mesmo problema e era alguma dessas propriedades, não vou lembrar exatamente qual agora
kenneth
Novembro 28, 2011, 11:58am
#6
Obrigado pelas respostas…
jakefrog: Eu estou chamando com htt://localhost:8084/projeto/faces/login.xhtml
Cesar: Tentei tirar a limpeza de cache, mas nao deu certo.
Acho que o problema eh o filtro mesmo, pois se eu removo ele, aparece o formulario.
Mais precisamente, a parte do
request.getRequestDispatcher(PAGINA_DE_LOGIN).forward(req, res);
Existe algum outro tipo de redirect que eu possa fazer pra testar?
Obrigado
kenneth
Novembro 28, 2011, 12:21pm
#8
Humm
Navigation rules? Seria isso?
Tem o response.sendRedirect(). [=
Teve algum ponto final nesse assunto, estou com o mesmo problema.
kenneth
Outubro 1, 2012, 7:04am
#11
Fala brow,
Então, depois de apanhar alguns dias, chegamos a conclusão que os componentes não apareciam devido ao filtro, mas pelo seguinte:
Eu havia posto uma condição para redirecionar se o usuário não estivesse logado.
Mas o filtro obviamente pega toda requisição, inclusive de imagens, css e Javascript…
Eu consegui resolver colocando exceções no filtro, pra quando for esse tipo de recurso, o filtro não pegar.
Abraço!