java - JSTL c :set condition

标签 java jsp jstl

需要你的帮助来解决这个问题。
设想: 在我的 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/

相关文章:

java - 无法处理与 jSTL 相关的 Jasper 验证错误

java - Gradle 重复条目

java - 在 ClientRequestFilter 中附加查询参数

java - JSP 表达式中的 if-then-else?

java - 如何以不同的方式打印 getString 的值?

java - 使用 JSTL 将日期(以毫秒为单位)转换为日期格式

java - Displaytag 库 - 检测分页请求

java - 关于使用Apache ant的两个问题

java - 是否可以使用不同的方法将相同的映射映射到两个不同的 Controller ?

java - 如何使用 Struts 2 将图像文件插入 MySql 数据库