2012-01-18 18 views
8

Sto convertendo una webapp di piastrelle 1 esistente nell'architettura Tiles 2. Sto riscontrando problemi nel passaggio dei valori dalla pagina JSP agli attributi tile.Come passare valori da JSP a tile attributo?

Ecco il mio file di definizione piastrelle (piastrelle-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> 

Il layout.jsp assomiglia:

<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> 

Ho una pagina storia che utilizza il layout e la necessità di passare i valori agli attributi del modello.

<% 
    // 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> 

Nel story.jsp, posso System.out.print() i valori per myTitle myHeader e sono mostrando corretta. Ma questi valori NON sono passati agli attributi della tessera.

Qualche idea su come risolvere questo problema?

risposta

17

${mytitle} è un'espressione JSP EL che significa: trovare un attributo in ambito di pagina, o ambito di richiesta, o ambito di sessione, o ambito applicazione, denominato "mytitle".

Definendo una variabile scriptlet, non è stato definito un attributo in nessuno di questi ambiti. Funzionerebbe se tu avessi

pageContext.setAttribute("mytitle", mytitle); 

Ma usare gli scriptlet in JSP è una cattiva pratica. Non so da dove provenga il tuo bean di storie, ma probabilmente è un attributo di richiesta. Se è così, è possibile definire un attributo nuova pagina-scope in questo modo, utilizzando la JSTL:

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

Questo non è necessario, però, dal momento che è possibile utilizzare questa espressione direttamente nel tag piastrelle:

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

Maggiori informazioni su JSP EL in this tutorial.

+0

JB, la soluzione ha funzionato. Molte grazie. –

+0

Grazie per la tua risposta, sto usando questa soluzione ma il problema è che l'output sarebbe $ {story.title} Titolo della storia. Come vedi $ {story.title} sarà considerato come una variabile e un valore. Anche se, sto solo passando da Java non JSP. –

Problemi correlati