wake-up-neo.com

Ich kann eine Variable von einem JSP-Scriptlet an JSTL übergeben, aber nicht ohne Fehler von JSTL an ein JSP-Scriptlet

Der folgende Code verursacht einen Fehler:

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

Der Fehler sagt

"error a line 4: unknown symbol 'test'".

Wie übergebe ich test vom JSTL-Code an das JSP-Scriptlet?

49
Cornish

Skripte sind unformatiert Java eingebettet in den Seitencode, 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 Bereichsattributen, entweder im Bereich page, request oder session. Sie müssen Ihr Scriptlet überarbeiten, um test als Attribut auszufischen:

<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 Sie in den Dokumenten nach <c:set> Suchen, können Sie scope als page, request oder session und angeben Der Standardwert ist page.

Besser noch, benutze überhaupt keine Scriptlets: Sie bringen das Jesuskind zum Weinen.

104
skaffman

@skaffman hat es festgenagelt. Sie leben jeden in seinem eigenen Kontext. Ich würde jedoch nicht in Betracht ziehen, Scriptlets als die Lösung zu verwenden. Sie möchten vermeiden sie. Wenn Sie nur Zeichenfolgen in EL verketten möchten, haben Sie festgestellt, dass + -Operator schlägt für Zeichenfolgen in EL fehl (was korrekt ist), dann tun Sie einfach Folgendes:

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

Oder wenn abc aus einer anderen Variablen mit dem Namen ${resp}, dann mach:

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