5
respostas

[Invenção de moda] Incluir o menu e footer em todas as paginas

Fui inventar a moda de inserir o menu e footer em todas as paginas, e não estou conseguindo.

Lembrava do curso de Servlet que era possivel utilizar o import da lib jstl core para fazer isso sem replicar codigo. O problema que eu encontrei é que quando eu faço isso ele a parte importada não executa os ${xxxxxx}

Por exemplo, separei a parte dos css em um arquivo chamado default-css.jsp

<link href="${contextPath}resources/css/cssbase-min.css" rel="stylesheet" type="text/css" media="all" />
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' />
<link href="${contextPath}resources/css/fonts.css" rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/fontello-ie7.css" rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/fontello-embedded.css" rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/fontello.css" rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/style.css" rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/layout-colors.css" rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/responsive-style.css" rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/guia-do-programador-style.css" rel="stylesheet" type="text/css" media="all" />
<link href="${contextPath}resources/css/produtos.css" rel="stylesheet" type="text/css" media="all" />
<link rel="canonical" href="http://www.casadocodigo.com.br/" />

Na pagina de detalhe inclui a seguinte linha

// jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

// + jsp
<title>Livros de Java, Android, iPhone, Ruby, PHP e muito mais - Casa do Código</title>

<c:import url="default-css.jsp" />    

</head>

// resto do jsp

Porém o resultado que obtenho com a pagina rodando no servidor é:

<link href="resources/css/cssbase-min.css" rel="stylesheet" type="text/css" media="all" />
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' />
<link href="resources/css/fonts.css" rel="stylesheet" type="text/css" media="all" />
<link href="resources/css/fontello-ie7.css" rel="stylesheet" type="text/css" media="all" />
<link href="resources/css/fontello-embedded.css" rel="stylesheet" type="text/css" media="all" />
<link href="resources/css/fontello.css" rel="stylesheet" type="text/css" media="all" />
<link href="resources/css/style.css" rel="stylesheet" type="text/css" media="all" />
<link href="resources/css/layout-colors.css" rel="stylesheet" type="text/css" media="all" />
<link href="resources/css/responsive-style.css" rel="stylesheet" type="text/css" media="all" />
<link href="resources/css/guia-do-programador-style.css" rel="stylesheet" type="text/css" media="all" />
<link href="resources/css/produtos.css" rel="stylesheet" type="text/css" media="all" />
<link rel="canonical" href="http://www.casadocodigo.com.br/" />    

O ${contextPath} é ignorado.

Duvidas:

  1. Estou viajando em fazer isso?
  2. Tem alguma solução para fazer isso funcionar?
5 respostas

Incluindo mais informações:

O ${carrinhoCompras.quantidade} funciona normal , somente o ${contextPath} que não.

Não sei dizer porque o ${contextPath} é ignorado mas tenta passar o caminho completo e veja se funciona.

Com o escopo completo vai, mas é uma solução menos flexivel e mais propensa a erros, caso alguem mude a ordenação dos diretorios da pagina.

Minha hipotese do porque não está funcionado é que o Spring tenta resolver o escopo do arquivo jsp injetado, antes de executar a injeção, e como a minha classe ProdutosControler faz o request do "produtos/list.jsp, somente ele tem o contextPath.

O fato de eu ter umahipotese, não está me aproximado de uma solução visto que não encontrei na da no oraculo Google e Stackoverflow...............rsrs

Eu também não encontrei nada relevante no google. Na verdade encontrei um monte de gente reclamando disso também e muitos acham que é um bug.

Mas olhei no GUJ conhece ele?? É o tipo o Stackoverflow só que da Caelum . Não resolve seu problema diretamente mas é melhor do que passar o caminho completo.

http://www.guj.com.br/t/obtendo-pagecontext-request-contextpath/159434/5

Não conhecia! Vou passar a fuçar por lá :)

Estou seguindo com o curso e continuando a procurar um jeito de fazer isso que não seja escerver o nome completo do caminho (que funciona, mas não é a mais elegante)