需要你的帮助来解决这个问题.
场景:在我的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>没有明确范围的情况下执行操作,那么它将存储在页面范围中并在同一页面中获取.