2010-10-13 9 views
5

Ich bin auf einige andere Fragen gestoßen, die eine ähnliche, aber nicht identische Situation mit meinen beschreiben. This question, zum Beispiel, zeigt ziemlich genau das selbe Problem, außer dass ich keine Portlets benutze - ich benutze nur langweilige alte JSP + JSTL + EL + etc.Wie übermittele ich einen Parameter über einen JSTL-Import über einen Kontext an eine JSP?

Ich habe zwei Anwendungskontexte, und ich möchte eine JSP von einem zum anderen importieren. Ich weiß, wie das tun:

<c:import context="/" url="/WEB-INF/jsp/foo.jsp"/> 

Aber ich möchte auch einen Parameter in den importierten foo.jsp passieren. Aber dieser Code:

<c:import context="/" url="/WEB-INF/jsp/foo.jsp"> 
    <c:param name="someAttr" value="someValue"/> 
</c:import> 

scheint nicht richtig um den Parameter foo.jsp zu senden; wenn foo.jsp ist so etwas wie *

<% System.out.println("foo.jsp sees that someAttr is: " 
         + pageContext.findAttribute("someAttr")); %> 

dann wird diese ausgedruckt:

foo.jsp sees that someAttr is: null 

während ich dies sehen wollen:

foo.jsp sees that someAttr is: someValue 

so offensichtlich someAttr kann nicht gefunden werden in foo.jsp.

Wie behebe ich das?


* (ja, ich weiß, scriplets==bad, das ist nur für das Debuggen dieses ein Problem)

+0

Wie stellen Sie sicher, dass Ihr 'foo.jsp' tatsächlich importiert wird? –

+1

@Adeel: Ich bin mir nicht sicher, ob ich sehe, worauf du hinaus willst. Wenn ich eine Seite anfordere, die 'foo.jsp' importiert, sehe ich, dass' println' in meiner Konsole erscheint, und ich sehe einen Versuch, den anderen Inhalt von 'foo.jsp' zu verarbeiten, außer dass es von' $ {abhängig ist someAttr} '. Entschuldigung, es ist spät für mich - antwortet das? –

Antwort

6

Sie es als Anforderungsparameter einstellen, so dass Sie auch als Anfrageparameter bekommen sollte .

Da Sie Scriptlets scheinen auch nicht zu mögen, hier ist eine EL-Lösung:

${param.someAttr} 

Beachten Sie, dass <c:import> keine zusätzlichen Vorteile, die oben <jsp:include> in diesem speziellen Fall hinzufügen. Es ist nützlich, wenn Sie Dateien aus einem anderen Kontext oder einer anderen Domäne importieren möchten, aber das scheint jetzt nicht der Fall zu sein. Folgendes sollte auch nur gearbeitet:

<jsp:include page="/WEB-INF/jsp/foo.jsp"> 
    <jsp:param name="someAttr" value="someValue" /> 
</jsp:include> 

diese Weise kann die eingeschlossene Seite Zugang zu den gleichen PageContextundHttpServletRequest als Haupt JSP hat. Dies könnte am nützlichsten sein.

+0

Ich versuche tatsächlich, JSPs aus einem anderen Kontext zu importieren. Ich werde versuchen, es mit Ihrem '$ {param.someAttr}' - Vorschlag abzurufen - wenn das funktioniert, gibt es eine Möglichkeit, auf 'someAttr' zuzugreifen, als wäre es ein Attribut der Seite/request/etc (zB wie' $ { etwasAttr} ')? –

+0

Nein, es handelt sich um eine andere Anfrage. Session ist am besten, was Sie bekommen können, wenn die Kontexte die gleiche Sitzung teilen (konfigurierbar in der Serverkonfiguration).Ungeachtet dessen würde ich Anfrage-Parameter bevorzugen, um unvorhergesehene Konflikte zwischen verschiedenen Anfragen in derselben Sitzung zu vermeiden. – BalusC

+0

Spot wie immer. Vielen Dank! –

Verwandte Themen