2012-01-18 15 views
8

Estoy convirtiendo una aplicación web Tiles 1 existente a la arquitectura Tiles 2. Tengo problemas para pasar los valores de la página JSP a los atributos de los mosaicos.¿Cómo pasar valores de JSP al atributo de mosaicos?

Aquí está mi archivo de definición de azulejos (azulejos-definition.xml)

<tiles-definitions> 

    <definition name="cda.layout" template="/jsp/layouts/layout.jsp"> 
     <put-attribute name="pageTitle" value="StoryTitle" type="string"/> 
     <put-attribute name="pageHeader" value="StoryHeader" type="string"/> 
     <put-attribute name="resources" value="" type="string"/> 
    </definition> 

</tiles-definitions> 

El layout.jsp parece:

<html> 
    <head> 
    <title><tiles:insertAttribute name="pageTitle" flush="true"/></title> 
    </head> 

    <body> 
    ... 
    ... 

    <div class="content"> 
    <h1><tiles:insertAttribute name="pageHeader" flush="true"/></h1> 
    </div> 

    ... 
    ... 
    </body> 
</html> 

Tengo una página de historia que usa el diseño y la necesidad de pasar valores a los atributos de la plantilla.

<% 
    // create a business object and populate 
    String mytitle= story.getTitle(); 
    String myheader = story.getHeader(); 
    %> 

<tiles:insertTemplate template="../layouts/layout.jsp" flush="false" > 
    <tiles:putAttribute name="pageTitle" value="${mytitle}"/> 
    <tiles:putAttribute name="pageHeader"value="${myheader}"/> 
</tiles:insertTemplate> 

En el story.jsp, puedo System.out.print() los valores para myTitle, myHeader y que están mostrando correcta. Sin embargo, estos valores NO se transmiten a los atributos del mosaico.

¿Alguna idea de cómo solucionar esto?

Respuesta

17

${mytitle} es una expresión JSP EL que significa: encontrar un atributo en el alcance de la página, o el alcance de la solicitud, o el alcance de la sesión, o ámbito de aplicación, llamado "mytitle".

Al definir una variable scriptlet, no ha definido un atributo en ninguno de estos ámbitos. Funcionaría si tuviera

pageContext.setAttribute("mytitle", mytitle); 

Pero usar scriptlets en JSP es una mala práctica. No sé de dónde proviene su historia, pero es probable que sea un atributo de solicitud. Si es así, se puede definir una nueva página-alcance de atributos de esta manera, mediante el JSTL:

<c:set var="mytitle" value="${story.title}"/> 

Esto no es necesario, sin embargo, ya que es posible utilizar esta expresión directamente en la etiqueta de azulejos:

<tiles:putAttribute name="pageTitle" value="${story.title}"/> 

Lea más sobre el JSP EL en this tutorial.

+0

JB, esa solución funcionó. Muchas gracias. –

+0

Gracias por su respuesta, estoy usando esta solución pero el problema es que el resultado sería $ {story.title} Título de la historia. Como verá, $ {story.title} se considerará como una variable y valor. Aunque, solo estoy pasando de Java no JSP. –

Cuestiones relacionadas