Style do Primefaces não carrega na primeira página da aplicação

9 respostas
I

Olá amigos,
estou com um problema utilizando o primefaces que é o seguinte…
Possuo dois WebFilters, um para a autenticação e outro para o entityManager. Quando estes filters estão habilitados a página
de login é a primeira a ser executada e esta não carrega o estilo padrão do primefaces. Só dá certo quando eu desativo os filters…

peço ajuda de vcs por favor…

Muito Obrigado

9 Respostas

Hebert_Coelho

Seu filter deve estar barrando as chamadas do primefaces para carregar os estilos.

No seu filtro, veja as urls que estão sendo chamdas. você deve estar a bloquea-las.

I

nao tenho certeza… estes são os filtros:

Login

package br.com.umc.filtro;

import java.io.IOException;

import javax.faces.bean.SessionScoped;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet Filter implementation class LoginFilter
 */

@SessionScoped
public class LoginFilter implements Filter {

	/**
	 * Default constructor.
	 */
	public LoginFilter() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpSession session = req.getSession();

		if (session.getAttribute("autenticado") != null
				|| (req.getRequestURI().endsWith("login.xhtml"))) {
			chain.doFilter(request, response);
		} else {
			HttpServletResponse res = (HttpServletResponse) response;
			res.sendRedirect("login.xhtml");
		}

	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

entityManager

package br.com.umc.filtro;

import java.io.IOException;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class JPAFiltro implements Filter {

	private EntityManagerFactory factory;

	@Override
	public void destroy() {

		factory.close();
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		EntityManager entityManager = this.factory.createEntityManager();

		request.setAttribute("entityManager", entityManager);
		System.out.println("Abrindo transação");

		entityManager.getTransaction().begin();

		chain.doFilter(request, response);

		try {
			System.out.println("commit");

			entityManager.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			entityManager.getTransaction().rollback();
		} finally {
			entityManager.close();
		}

	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		this.factory = Persistence.createEntityManagerFactory("recrutamento");
	}

}

Obrigado

Hebert_Coelho

Tudo bem, mas é vc que tem q ver isso. =P

coloque um system.out.println e veja todas as url q estão sendo solicitadas. E veja qual que você pode permitir para ir numa boa.
Deve ter chamada do próprio primefaces aí.

I

jakefrog, vc poderia me dizer como imprimir as url’s??

Obrigado

R

É como o nosso amigo jakefrog falou,o filtro de autenticação tá barrando o acesso ao recurso.

Eu uso assim no meu filtro :

public class LoginFilter implements Filter {
	@Override
	public void init(FilterConfig arg0) throws ServletException {}
	@Override
	public void destroy() {}

	@Override
	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		try{
			HttpServletRequest httpReq = (HttpServletRequest)req;
			HttpServletResponse httpRes = (HttpServletResponse)res;
			HttpSession session = httpReq.getSession(true);
			String url = httpReq.getRequestURL().toString();
			if(session.getAttribute("usuario")==null && precisaAutenticar(url)){
				httpRes.sendRedirect(httpReq.getContextPath()+"/login.jsf");
			}else{
				chain.doFilter(req, res);
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	boolean precisaAutenticar(String url){
		return && !url.contains("login.jsf")
		&& !url.endsWith(".css")
		&& !url.endsWith(".js")
		&& !url.endsWith(".jpg")
		&& !url.endsWith(".gif");
	}
}
Hebert_Coelho

Ei sei que você pega de dentro do request.

Não me lembro agora de cabeça, request.get alguma coisa.

Sei que um dos métodos é req.getRequestURL() mas tem outros. Futuca aí q vc acha.

Aí antes do if para barrar o login você pode mandar imprimir quem ta chamando oq, você vai ver que vão ter diversas chamadas.

I

jakefrog realmente ele exibe varias chamadas a “css”, “js”, tal…
mas como fazer para nao barrar esses caras no primeiro acesso da página?
O método do raf4ever nao funcionou aki, dá um problema que o chrome diz q
“existem muitos redirecionamentos” e entao a pagina falha =/

alguma dica?

Muito Obrigado

Hebert_Coelho

No if que barra os request de pessoas não logadas, libere a chama aos css da vida. [=

D

Valeu a dica raf4ever funcionou certinho recuperando o css do primefaces.

Só tive que modificar ele um pouco.

private boolean precisaAutenticar(String url) {
		return !url.contains("login.jsf") && !url.endsWith(".css") && !url.endsWith(".js") && !url.endsWith(".jpg")
				&& !url.endsWith(".gif") && !url.contains("javax.faces.resource");
	}
Criado 21 de março de 2012
Ultima resposta 28 de mar. de 2012
Respostas 9
Participantes 4