需要你的帮助来解决这个问题。
设想:
在我的 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 不参与同一请求。然后,您应该获取 session 范围(并注意,通过这种方式,变量会在所有浏览器窗口/选项卡的所有请求中公开!这本身并不是可取的)。您应该只确保在 every <c:set var="season">
中指定范围.
<c:set var="season" value="some value" scope="session" />
EL 表达式 ${season}
即分别在page、request、session、application范围内寻找第一个非空属性。所以如果你做 <c:set>
如果没有显式范围,则它将存储在页面范围内并在同一页面中获取。
关于java - JSTL c :set condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7448917/