JSTL-Tag c:eingestellte Bedingung
Müssen Ihr helfen, herauszufinden, diese Sache ausgeht.
Szenario:
Auf meiner JSP-ich bin versucht zu drucken
<b>Season 1: ${season}</b>
<b>Season 2: ${season}</b>
diese Drucke fein das erste mal (Beide seasons drucken als "winter" am Anfang). Nun wollte ich eine if Bedingung hinzufügen, ändern Saison Wert wie:
<c:if test="${temperature eq 'HOT' || 'VERYHOT'}">
<c:set var="season" value="summer is here" />
</c:if>
Auf die Ausführung dieser wenn-Bedingung, Staffel 1 ändert sich zu "der Sommer ist da", aber Staffel 2 bleibt gleich. Warum bleibt es so? Staffel 1 ist Teil von Seite1.jsp und Season 2 ist Teil von Seite 2.jsp
und Sie sind enthalten im inneren parentPage.jsp
- Was ist der Umfang der
season
? Auch, ändern Sie dietest
zu${temperature eq 'HOT' || temperature eq 'VERYHOT'}
. - Ist parentPage.jsp die eine, die enthält
<c:if/>
tag? Wie sind Sie einschließlich page1 und page2? - Hi Matt, ich hielt es im Standardbereich.
- Mac, seine Seite1.jsp enthalten c:wenn
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwei Probleme:
Erstens, dein Vergleich ist nicht gültig. Die 2. Bedingung ist immer
true
. Fix es entsprechend:Zweite, du bist die Speicherung der variable in der Standard-Seite, der Umfang ist nicht freigegeben enthaltenen JSP-Seiten. Speichern Sie es in der Anfrage Umfang statt.
Update: wie sich herausstellt, gemäß der Kommentare, werden diese JSP nicht an der gleichen Anfrage. Sie sollten dann nehmen Sie den session-scope (und sich bewusst sein, dass diese Art der Variablen ausgesetzt, in allen Anfragen, in allen browser-Fenstern/tabs! dies ist nicht per se wünschenswert). Sie sollten nur sicherstellen, dass Sie die Angabe des Geltungsbereichs in jeder
<c:set var="season">
.Den EL-Ausdruck
${season}
wird nämlich der Suche nach dem ersten nicht-null-attribtue jeweils die Seite, request -, session-und application-scopes. Wenn du also eine<c:set>
ohne einen expliziten Bereich, dann wird es gespeichert in Seite Bereich und erhalten auf derselben Seite als solche.