2010-11-30 7 views
10

Hace un tiempo tuve la idea de poner todas mis declaraciones taglib (uri's, etc.) en un archivo de encabezado común para no tener que escribirlas manualmente en todas mis JSPs. Inicialmente, las cosas parecían estar bien, aunque no utilizo tanto los taglibs reales como la simple sintaxis EL. Sin embargo, estoy teniendo problemas en todos los archivos jsp excepto en el que explícitamente ha declarado los taglibs. Todos los demás jsp (que incluyen el archivo de encabezado) tratan la etiqueta <c:something.../> como si fuera HTML y no la evalúan. Hice algunas búsquedas en Google y encontré this post on O'Reilly sugiriendo que lo que estoy tratando de hacer se puede hacer, pero claramente estoy haciendo algo mal. Lo que es más es que las otras cosas en el archivo de encabezado (encabezados de página comunes, títulos de página, etc.) se muestran bien. El archivo de encabezado y una muestra de la inclusión están a continuación.Taglibs JSTL no reconocidos cuando se declara en el encabezado común

Archivo de cabecera:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<%@ page session="false" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> 

comunicado Inclusión: Comportamiento

<jsp:include page="/WEB-INF/jsp/include/header.jsp"> 
    <jsp:param name="title" value="Home" /> 
</jsp:include> 

Respuesta

21

Con ello se espera.

Cuando usa <jsp:include>, ejecutó el destino en una solicitud separada y luego incluye el resultado en el JSP incluido. No incluye la fuente del objetivo incluido, incluye la salida . Se pierde el medio por el cual se genera ese producto objetivo.

para hacer lo que estamos tratando de hacer, es necesario utilizar <% include %> directivas:

<%@ include file="/WEB-INF/jsp/include/header.jsp" %> 

Esto se inclinará el texto literal de header.jsp en su página. Por supuesto, al hacerlo, ya no puede pasarle parámetros, por lo que deberá configurarlo como un atributo de contexto de página (por ejemplo, usando <c:set> ... pero, por supuesto, no puede usar <c:set> hasta que haya terminado tu incluye ...).

Básicamente, no vale la pena la molestia. Las declaraciones de Taglib son una repetición molesta, pero difíciles de eliminar.

+0

Oh wow, eso es un problema horrible de gallina o huevo, ¿no? Supongo que la mejor manera de hacerlo sería dividirlos en dos, uno que vaya en la página y use la sintaxis '<% @ include ...' y otro que use '' sintaxis, ¿ya? –

+0

@Chris: Podría dividirlo en 2 incluye, tal vez ... uno que use '<% @ include%>' para los taglibs, otro que use '' para el encabezado HTML ... – skaffman

+0

Acabo de editar mi comentario, pero parece como si tuviéramos la misma idea :-) ¡Gracias! –

Cuestiones relacionadas