wake-up-neo.com

Zugriff auf eine Jstl-Variable innerhalb eines Scriptlets

Der folgende Code verursacht einen Fehler:

       <c:set var="test" value="test1"/>
      <%
        String resp = "abc"; 
        resp = resp + ${test};  //in this line I got an  Exception.
        out.println(resp);
       %>

Benutze ich nicht die Ausdruckssprache "$ {test}" im scriptlet.why?

30
reddy

JSTL Variablen sind eigentlich Attribute und werden standardmäßig auf der Ebene des Seitenkontexts festgelegt.
Wenn Sie also auf einen JSTL-Variablenwert in einem Scriptlet zugreifen müssen, können Sie dies durch Aufrufen der getAttribute() -Methode für das entsprechend dimensionierte Objekt (normalerweise pageContext und request) durchführen. 

resp = resp + (String)pageContext.getAttribute("test"); 

Vollständiger Code 

 <c:set var="test" value="test1"/>
 <%
    String resp = "abc"; 
    resp = resp + (String)pageContext.getAttribute("test");   //No exception.
    out.println(resp);
  %>  

Update 

Aber warum kommt diese Ausnahme zu mir? 

Ein JSP-Scriptlet enthält alle Codefragmente, die für die auf einer Seite verwendete Skriptsprache gültig sind. Die Syntax für ein Scriptlet lautet wie folgt:

<%
   scripting-language-statements
%>

Wenn für die Skriptsprache Java festgelegt ist, wird a ein Scriptlet in ein Anweisungsfragment einer Java-Programmiersprache umgewandelt und in die Servicemethode des Servlets der JSP-Seite eingefügt. 

In Scriptlets können Sie Java-Code und ${test} in nicht Java-Code schreiben. 


Nicht verwandten 

58
Aniket Kulkarni

Der Inhalt Ihres Scriptlet-Codes (in <% %>) ist ein Java-Code-Codeausschnitt, der in die Servicemethode des übersetzten Servlets eingefügt werden soll (JSPs werden in Servlet-Klassen übersetzt). Nur gültige Java-Syntax kann dort abgelegt werden, daher können Sie keine Ausdruckssprache verwenden. Wenn Sie zwei Zeichenfolgen in JSP anhängen möchten, war die erste Konstante "abc" und die zweite ist der Wert einer EL, können Sie sie einfach verwenden

abc${test}

Wenn Sie das Ergebnis in einer Skriptvariablen speichern möchten, folgen Sie der Antwort von Aniket (obwohl ich raten sollte, Skripting überhaupt zu vermeiden).

0
Kojotak