需要你的帮助来解决这个问题 场景: 在我的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
中答案 0 :(得分:14)
两个问题:
首先,您的比较无效。第二个条件始终为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>
,那么它将存储在页面范围内并在同一页面中获取。