JSTL c:设定条件

时间:2011-09-16 18:30:38

标签: 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

1 个答案:

答案 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>,那么它将存储在页面范围内并在同一页面中获取。