2011-10-17 5 views
16

Sto tentando di accedere ad alcune variabili JSTL impostate su un ciclo for JSTL in un inclus.Passando c: forOgni variabile a un jsp: include

Esempio:

<c:forEach items="${cart.entries}" var="entry"> 
<jsp:include page="helper.jsp"></jsp:include> 
</c:forEach> 

All'interno helper.jsp io voglio essere in grado di fare riferimento alla 'ingresso' variabile. Continua a venire come 'vuoto'. Ho pensato che forse ci potrebbe essere un modo per aggiungere scope alla variabile Everyach come è possibile con le normali variabili set.

Qualche idea?

risposta

25

RISPOSTA: Ho finito solo per farlo per farlo funzionare.

<c:forEach items="${cart.entries}" var="entry"> 
<c:set var="entryFC" value="${entry}" scope="request"></c:set> 
<jsp:include page="helper.jsp"></jsp:include> 
</c:forEach> 

Poi ho fatto riferimento alla entryFC nel mio elenco. Non è molto elegante, ma funziona, quindi credo che andrà male.

+11

Stavo cercando un modo più elegante, ma ho finito per farlo. A proposito, non è necessario rinominare la variabile: '' funziona bene e rischia di essere meno confuso . – Dmitri

0

So che è molto tardi per rispondere a questa domanda, ma può essere utile a chi si è bloccato in questa situazione e alla ricerca di risposte.

La mia risposta funzionerà se non si è strettamente vincolati all'utilizzo del tag <jsp: include> per includere jsp. Invece, è possibile utilizzare <%@include file="/WEB-INF/views/path-to-jsp.jsp" %> per importare un altro jsp nella pagina e questa pagina può utilizzare la variabile di ciclo del tag <c:forEach>.

Ad esempio.

<c:forEach items="${users}" var="user"> 

    <%@include file="/WEB-INF/views/path-to-jsp.jsp" %> <!-- here ${user} can be use in importing jsp file. --> 
</c:forEach> 

Si sta lavorando perché <%@include file="" %> tag inietterà il contenuto del file chiamato nel JSP contenenti il ​​tag, come se fosse stato copiato e incollato. Questo viene fatto prima che il contenuto del file incluso sia analizzato, mentre viene analizzato mentre viene analizzato il JSP contenente. Questo è più simile a una direttiva C# include, dove durante la pre-elaborazione il file incluso viene "incollato" in posizione prima che il file venga compilato. Dopo che il contenuto è stato incluso, viene valutato, tutto nello stesso contesto, e quindi con gli stessi accessi e vincoli che il codice incluso avrebbe se i contenuti fossero semplicemente digitati in posizione.

Considerando che il tag <jsp:include page=""/> si comporta in modo diverso in quanto il risultato del rendering della pagina specificata viene iniettato nel JSP contenente nel punto del tag. Ciò avviene essenzialmente inviando la pagina richiesta allo stesso contenitore, come una richiesta di rendering separata e prendendo i risultati, non il contenuto del file. Questa richiesta viene eseguita nel suo contesto, nel senso che non utilizza le stesse informazioni sulla pagina della pagina che contiene il tag. Questo può essere utile, specialmente se il contenuto incluso può avere variabili in conflitto, per esempio.