[英]JSTL c:set condition
需要你的幫助來解決這個問題。
場景:在我的JSP上,我正在嘗試打印
<b>Season 1: ${season}</b>
<b>Season 2: ${season}</b>
這是第一次打印好(兩個季節最初打印為“冬天”)。 現在我想添加一個if條件來改變季節值,如:
<c:if test="${temperature eq 'HOT' || 'VERYHOT'}">
<c:set var="season" value="summer is here" />
</c:if>
執行此if條件時,第1季將更改為“夏天在這里”,但第2季保持不變。 它為什么如此? 第1季是page1.jsp的一部分,第2季是page2.jsp的一部分,它們包含在parentPage.jsp中
兩個問題:
首先,您的比較無效。 第二個條件總是true
。 相應修復:
<c:if test="${temperature eq 'HOT' || temperature eq 'VERYHOT'}">
其次,您將變量存儲在默認頁面范圍中,該范圍在包含的JSP頁面之間不共享。 而是將其存儲在請求范圍內。
<c:set var="season" value="summer is here" scope="request" />
更新 :根據評論結果,這些JSP不參與同一請求。 然后,您應該獲取會話范圍(並且請注意,這樣變量會在所有瀏覽器窗口/選項卡中的所有請求中公開!這不是本身所希望的)。 您應該只確保在每個 <c:set var="season">
指定范圍。
<c:set var="season" value="some value" scope="session" />
EL表達式${season}
將分別在頁面,請求,會話和應用程序范圍中搜索第一個非空的屬性。 因此,如果您在沒有顯式范圍的情況下執行<c:set>
,那么它將存儲在頁面范圍中並在同一頁面中獲取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.