Incluindo a página JSP em outra página JSP, como evitar várias seções de cabeça / corpo?

StackOverflow https://stackoverflow.com/questions/1841274

  •  12-09-2019
  •  | 
  •  

Pergunta

Eu gostaria de incluir uma página JSP em outra página JSP. Digamos que eu tenho master.jsp Isso está incluindo slave.jsp.

Como slave.jsp tem o seu próprio <head> Seção para lidar com JavaScript e CSS, existe uma maneira ou talvez outro método para mesclar o mastere slave CABEÇAS seção em um único? Também o mesmo deve ser feito para o CORPOS seção.

Eu tenho usado Sitemesh Recentemente, mas acho que é bastante impraticável para configurar um modelo para cada página.

Foi útil?

Solução

Eu fui para esta solução passando um parâmetro Ao incluir a página.

dentro Master.jsp

<head>
  blablabla
  <c:import url="slave.jsp">
    <c:param name="sectionName" value="HEAD" />
  </c:import>
</head>
<body>
  blablabla
  <c:import url="slave.jsp">
  </c:import>
</body>

e então em slave.jsp O parâmetro é lido e a parte personalizada da página é renderizada.

<c:choose>
  <c:when test="${param.sectionName == 'HEAD'}">
     head section here [without the <HEAD> tags !]
  </c:when>
  <c:otherwise>
     body section here [without the <BODY> tags !]
  </c:otherwise>
</c:choose>

Não é muito bom para ver, mas trabalhando. Dessa forma, sou capaz de remover a duplicação de HEAD e BODY peças.

Outras dicas

Você não pode e não deve mesclar dois <html> documentos um no outro. Isso produziria saída inválida. Melhor incluir CSS/JS condicionalmente com a ajuda de Jstl c:if ou c:choose Tag.

Exemplo básico:

<head>
    <script type="text/javascript" src="global.js"></script>
    <c:if test="${isAdminPage}">
        <script type="text/javascript" src="admin.js"></script>
    </c:if>
</head>

Fora de Sitemesh, você está praticamente sem sorte. No entanto, eu reconsideraria seu design se você achar que a configuração por página é impraticável. Quantas páginas seu aplicativo terá?

You could also extend the conditional option, and make a meta.jsp (for example), which contains a Map for each of the head elements - meta tags, css hrefs, script hrefs, and use the name of the jsp as a key in that Map. Then you call request.getRequestURI(), and show whatever you have put in the map under that key. Not a very beautiful solution, but working.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top