2012-01-18 14 views
8

Konwertuję istniejącą aplikację webową Tiles 1 do architektury Tiles 2. Mam problem z przekazaniem wartości ze strony JSP do atrybutów kafelków.Jak przekazywać wartości z JSP do atrybutów płytek?

Oto mój plik definicji płytki (płytki-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> 

layout.jsp wygląda następująco:

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

Mam stronę historii, która wykorzystuje układ i trzeba przekazać wartości do atrybutów szablonu.

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

W story.jsp mogę System.out.print() wartości dla mytitle, myheader a oni pokazują prawidłowe. Ale te wartości NIE są przekazywane atrybutom płytki.

Każdy pomysł, jak to naprawić?

Odpowiedz

17

jest wyrażeniem JSP EL, które oznacza: znajdowanie atrybutu w zasięgu strony lub zasięgu żądania, zakresu sesji lub zakresu aplikacji o nazwie "mytitle".

Definiując zmienną scriptlet, nie zdefiniowano atrybutu w żadnym z tych zakresów. To działa, jeśli miał

pageContext.setAttribute("mytitle", mytitle); 

Ale używając scriptlets w JSP jest złą praktyką. Nie wiem skąd pochodzi twoja fabuła, ale to prawdopodobnie atrybut żądania. Jeśli tak, to można zdefiniować nową stronę-scope przypisują ten sposób, przy użyciu JSTL:

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

To jest niepotrzebne, choć, ponieważ można użyć tego wyrażenia bezpośrednio w znaczniku płytek:

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

Przeczytaj więcej o JSP EL w this tutorial.

+0

JB, to rozwiązanie zadziałało. Wielkie dzięki. –

+0

Dziękuję za odpowiedź, używam tego rozwiązania, ale problemem jest wynik $ {story.title} Tytuł historii. Jak widzisz, $ {story.title} będzie traktowane jako zmienna i wartość. Chociaż właśnie przekazuję go z Java, a nie z JSP. –

Powiązane problemy