JSTL c:设定条件

t0m*_*cat 9 java jsp jstl

需要你的帮助来解决这个问题.
场景:在我的JSP上,我正在尝试打印

<b>Season 1: ${season}</b>

<b>Season 2: ${season}</b>
Run Code Online (Sandbox Code Playgroud)

这是第一次打印好(两个季节最初打印为"冬天").现在我想添加一个if条件来改变季节值,如:

<c:if test="${temperature eq 'HOT' || 'VERYHOT'}">
       <c:set var="season" value="summer is here" />
 </c:if>
Run Code Online (Sandbox Code Playgroud)

执行此if条件时,第1季将更改为"夏天在这里",但第2季保持不变.它为什么如此?第1季是page1.jsp的一部分,第2季是page2.jsp的一部分,它们包含在parentPage.jsp中

Bal*_*usC 14

两个问题:

首先,您的比较无效.第二个条件总是如此true.相应修复:

<c:if test="${temperature eq 'HOT' || temperature eq 'VERYHOT'}">
Run Code Online (Sandbox Code Playgroud)

其次,您将变量存储在默认页面范围中,该范围在包含的JSP页面之间不共享.而是将其存储在请求范围内.

<c:set var="season" value="summer is here" scope="request" />
Run Code Online (Sandbox Code Playgroud)

更新:根据评论结果,这些JSP不参与同一请求.然后,您应该获取会话范围(并且请注意,这样变量会在所有浏览器窗口/选项卡中的所有请求中公开!这不是本身所希望的).您应该只确保在每个 范围内指定范围<c:set var="season">.

<c:set var="season" value="some value" scope="session" />
Run Code Online (Sandbox Code Playgroud)

EL表达式${season}将分别在页面,请求,会话和应用程序范围中搜索第一个非空属性.因此,如果您在<c:set>没有明确范围的情况下执行操作,那么它将存储在页面范围中并在同一页面中获取.