11 Stimmen

Kann eine JSP-Tag-Datei auf den PageContext des aufrufenden JSPs zugreifen?

Wenn ich es tue:

<% pageContext.setAttribute("foo", "bar"); %>
<custom:myTag/>

es scheint, dass ich dazu in der Lage sein sollte:

<%= pageContext.getAttribute("foo") %>

innerhalb von myTag.tag ... aber natürlich kann ich nicht, weil die Tag-Datei keinen Zugriff auf den pageContext hat (stattdessen hat es Zugriff auf einen jspContext ... die nicht die gleichen Attribute wie die aufrufende Seite pageContext haben).

Jetzt können Sie über ELScript auf den pageContext zugreifen:

${pageContext}

aber das hilft nicht, weil ELScript keine Möglichkeit hat, Argumente zu übergeben, also kann man das nicht tun:

${pageContext.getAttribute("foo")}

Die Tatsache, dass ELscript auf den Seitenkontext zugreifen kann, und die Tatsache, dass der Tag auf alle Arten von Variablen wie jspContext zugreifen kann, bedeutet jedoch, dass es eine Möglichkeit geben muss, dass ein Tag auf ein Attribut aus dem Seitenkontext des aufrufenden JSPs zugreifen kann (in einer Scriptlet-/Java-Logik, nicht nur in ELScript).

Gibt es eine?

8voto

BalusC Punkte 1034465

Was EL betrifft, so ist die ${pageContext.getAttribute("foo")} funktioniert nur in EL 2.2. Davor lautet die richtige Syntax ${pageContext.foo} oder einfach ${foo} . Siehe auch unser EL-Wiki-Seite .

Allerdings ist die ${pageContext} wird von der übergeordneten JSP-Datei und dem JSP-Tag nicht gemeinsam genutzt. Jedes hat seine eigene Instanz.

Sie könnten entweder stattdessen als Anfrageattribut festlegen:

<% request.setAttribute("foo", "bar") %>
<custom:myTag />

mit im Tag

<%= request.getAttribute("foo") %>

oder, mit EL

${requestScope.foo}

o

${foo}

Ou oder besser noch, Sie könnten es als vollwertiges Tag-Attribut übergeben

<custom:myTag foo="bar" />

mit im Tag

<%@attribute name="foo" required="true" %>
${pageContext.foo}

oder einfach

<%@attribute name="foo" required="true" %>
${foo}

1voto

mgaert Punkte 2196

Es sieht so aus, als ob zumindest in WebLogic 10 das implizite "Anwendungs"-Objekt es in Tag-Dateien verfügbar und ist eine Instanz von ServletContext. Verwenden Sie dies vielleicht, wenn es wirklich der ServletContext ist, den man sucht, und nicht unbedingt der übergeordnete pageContext.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X