2010-08-25 8 views

Antwort

94

Skripte sind in den Seitencode eingebettetes rohe Java, und wenn Sie Variablen in Ihren Skripten deklarieren, werden sie zu lokalen Variablen, die in die Seite eingebettet sind.

Im Gegensatz dazu arbeitet JSTL vollständig mit Scoped-Attributen, entweder unter page, request oder session Scope. Sie benötigen scriptlet zu überarbeiten test aus als Attribut zu fischen:

<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}"/> 

Wenn man sich die Dokumente sucht <c:set>, Sie werden sehen, Sie scope als page, request oder session, und es standardmäßig page angeben .

Besser noch, verwenden Sie keine Scriptlets überhaupt: Sie lassen das Baby Jesus weinen.

+4

JSTL macht mich weinen, oder zumindest zusammenzucken, wenn ich viel von der fugly Sachen zu lesen. Trotzdem danke! – Roboprog

13

@skaffman hat es genagelt. Sie leben jeweils in ihrem eigenen Kontext. Ich würde jedoch keine Scriptlets als Lösung verwenden. Sie möchten avoid ihnen. Wenn alles, was Sie wollen, ist, Strings in EL verketten und man entdeckte, dass der + Operator für Streicher in EL ausfällt (was richtig ist), dann tut nur:

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

Oder wenn abc wird von einer anderen Bereichs-Variablen erhalten benannt ${resp}, dann tun:

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