2010-08-25 15 views

risposta

94

Gli script sono java raw incorporati nel codice della pagina e se si dichiarano variabili negli script, diventano variabili locali incorporate nella pagina.

Al contrario, JSTL funziona interamente con attributi con ambito, a page, request o session. È necessario rielaborare il tuo scriptlet a pescare test come un attributo:

<c:set var="test" value="test1"/> 
<% 
    String resp = "abc"; 
    String test = pageContext.getAttribute("test"); 
    resp = resp + test; 
    pageContext.setAttribute("resp", resp); 
%> 
<c:out value="${resp}"/> 

Se guardate la documentazione per <c:set>, vedrete è possibile specificare scope come page, request o session, e il suo valore predefinito per page .

Meglio ancora, non utilizzare scriptlet a tutti: fanno il grido Gesù bambino.

+4

JSTL mi fa piangere, o almeno rabbrividisco quando devo leggere gran parte delle cose fugaci. Grazie comunque! – Roboprog

13

@skaffman inchiodato. Vivono ciascuno nel proprio contesto. Tuttavia, non prenderei in considerazione l'utilizzo di scriptlet come la soluzione. Vorresti acquistare avoid. Se invece si è per concatenare le stringhe in EL e si scoprì che l'operatore + fallisce per archi in EL (che è corretto), poi basta fare:

<c:out value="abc${test}" /> 

O se abc è quello ottenuto da un'altra variabile con scope di nome ${resp}, quindi:

<c:out value="${resp}${test}" />