19 Stimmen

Übergabe der c:forEach-Variable an ein jsp:include

Ich versuche auf einige JSTL-Variablen zuzugreifen, die in einer JSTL-for-Schleife in einem include gesetzt wurden.

Beispiel:

In helper.jsp möchte ich die Variable 'entry' referenzieren können. Es taucht immer wieder als 'empty' auf. Ich dachte, vielleicht gibt es einen Weg, dem forEach-Variable wie bei normalen Variablen einen scope hinzuzufügen.

Irgendwelche Ideen?

29voto

littlevahn Punkte 615

ANTWORT: Am Ende musste ich einfach das hier machen, um es zum Laufen zu bringen.

Dann habe ich auf entryFC in meinem Include verwiesen. Überhaupt nicht elegant, aber es funktioniert, also werde ich es wohl so machen.

13 Stimmen

Ich habe nach einem eleganteren Weg gesucht, aber letztendlich das gemacht. Übrigens, du musst die Variable nicht umbenennen: funktioniert genauso gut und ist wahrscheinlich weniger verwirrend.

2voto

Vijay Shegokar Punkte 2362

Ich weiß, dass es sehr spät ist, um auf diese Frage zu antworten, aber es könnte hilfreich sein für diejenigen, die in dieser Situation feststecken und nach Antworten suchen.

Meine Antwort wird funktionieren, wenn Sie nicht strikt an die Verwendung des Tags gebunden sind, um jsp einzubinden. Stattdessen können Sie <%@include file="/WEB-INF/views/path-to-jsp.jsp" %> verwenden, um eine andere jsp in die Seite zu importieren, und diese Seite kann Ihr Tag-Schleifenvariable verwenden.

Zum Beispiel.

    <%@include file="/WEB-INF/views/path-to-jsp.jsp" %> 

Es funktioniert, weil das <%@include file="" %> Tag die Inhalte der benannten Datei in die enthaltene JSP einfügt, als ob sie kopiert und eingefügt worden wären. Dies geschieht, bevor der Inhalt der eingefügten Datei analysiert wird, anstatt während die enthaltene JSP analysiert wird. Dies ähnelt eher einer C #include Direktive, bei der während des Preprocessing die eingefügte Datei an ihren Platz "eingefügt" wird, bevor die Datei kompiliert wird. Nach dem Einfügen wird der Inhalt bewertet, alles im selben Kontext und daher mit denselben Zugriffen und Einschränkungen, die der eingefügte Code hätte, wenn die Inhalte einfach an Ort und Stelle eingegeben würden.

Im Gegensatz dazu verhält sich das Tag anders, indem das Ergebnis des Renderns der angegebenen Seite in die enthaltene JSP an dem Punkt des Tags eingefügt wird. Dies geschieht, indem die angeforderte Seite praktisch demselben Container als separate Renderequst übermittelt wird und die Ergebnisse, nicht die Inhalte der Datei. Diese Anfrage erfolgt in ihrem eigenen Kontext, was bedeutet, dass sie nicht dieselben Seiteninformationen wie die Seite verwendet, die das Tag enthält. Dies kann nützlich sein, insbesondere wenn der eingefügte Inhalt möglicherweise konfliktierende Variablen hat, zum Beispiel.

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