2010-10-13 4 views
5

Mi sono imbattuto in alcune altre domande che descrivono una situazione simile, ma non identica, alla mia. This question, ad esempio, mostra più o meno lo stesso problema, tranne che non sto usando portlet - Sto solo usando noioso JSP + JSTL + EL + ecc.Come si passa un parametro a un JSP tramite un'importazione JSTL cross-context?

Ho due contesti applicativi e vorrei importare un JSP da uno all'altro. Io so come farlo:

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

Tuttavia, ho anche voglia di passare un parametro a quella importata foo.jsp. Ma questo codice:

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

non sembra per inviare correttamente il parametro da foo.jsp; se foo.jsp è qualcosa di simile *

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

allora questo viene stampato:

foo.jsp sees that someAttr is: null 

mentre io voglio vedere questo:

foo.jsp sees that someAttr is: someValue 

così, ovviamente, someAttr non può essere trovato in foo.jsp.

Come posso risolvere questo problema?


* (sì, lo so, scriplets==bad, questo è solo per il debug di questo problema)

+0

Come stai facendo in modo che il tuo 'foo.jsp', sia effettivamente importato? –

+1

@Adeel: non sono sicuro di vedere cosa stai ricevendo. Quando richiedo una pagina che importa 'foo.jsp', vedo la' println' nella mia console, e vedo un tentativo di elaborare l'altro contenuto di 'foo.jsp', tranne che dipende da' $ { someAttr} '. Scusa, è tardi per me - risponde? –

risposta

6

Stai impostarlo come parametro di richiesta, così si dovrebbe anche essere sempre come parametro di richiesta .

Dal momento che ti sembra di non gradire scriptlet così, ecco una soluzione EL:

${param.someAttr} 

noti che <c:import> non aggiunge alcun vantaggio in più sopra <jsp:include> in questo caso particolare. È utile quando vuoi importare file da un contesto diverso o da un dominio completamente diverso, ma ora non sembra essere il caso. Il seguente dovrebbe anche solo aver funzionato:

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

In questo modo la pagina inclusa ha accesso alla stessa PageContexteHttpServletRequest come il principale JSP. Questo potrebbe risultare più utile.

+0

In realtà sto cercando di importare JSP da un contesto diverso. Proverò a recuperarlo con il tuo suggerimento '$ {param.someAttr} - se funziona, c'è un modo per accedere a' someAttr' come se fosse un attributo della pagina/request/etc (es. Come '$ { someAttr} ')? –

+0

No, si tratta di una richiesta diversa. La sessione è la migliore cosa è possibile ottenere se i contesti condividono la stessa sessione (configurabile nella configurazione del server).Indipendentemente da ciò, preferirei richiedere parametri per evitare scontri imprevisti tra diverse richieste nella stessa sessione. – BalusC

+0

Spot on come sempre. Grazie! –