JSTL c:设置条件

发布于 2024-12-05 04:10:04 字数 497 浏览 0 评论 0原文

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

Need your help figuring this thing out.
Scenario:
On my JSP, I am trying to print

<b>Season 1: ${season}</b>

<b>Season 2: ${season}</b>

this prints fine the first time (Both seasons print as "winter" initially). Now I wanted to add an if condition to change season value like:

<c:if test="${temperature eq 'HOT' || 'VERYHOT'}">
       <c:set var="season" value="summer is here" />
 </c:if>

On executing this if condition, Season 1 changes to "summer is here" but Season 2 stays the same. Why it stays so? Season 1 is part of page1.jsp and Season 2 is part of page2.jsp
and they are included inside parentPage.jsp

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一百个冬季 2024-12-12 04:10:04

有两个问题:

第一,你的比较无效。第二个条件始终为true。相应地修复它:

<c:if test="${temperature eq 'HOT' || temperature eq 'VERYHOT'}">

其次,您将变量存储在默认页面范围内,该范围不在包含的 JSP 页面之间共享。相反,将其存储在请求范围中。

<c:set var="season" value="summer is here" scope="request" />

更新:根据评论,这些 JSP 不参与同一请求。然后,您应该获取会话范围(并注意,这样变量就会在所有浏览器窗口/选项卡的所有请求中公开!这本身并不是可取的)。您只需确保在 every 中指定范围。

<c:set var="season" value="some value" scope="session" />

EL 表达式 ${season} 将分别在页面、请求、会话和应用程序范围中搜索第一个非空属性。因此,如果您在没有显式作用域的情况下执行 ,那么它将存储在页面作用域中并在同一页面中获取。

Two problems:

First, your comparison is not valid. The 2nd condition is always true. Fix it accordingly:

<c:if test="${temperature eq 'HOT' || temperature eq 'VERYHOT'}">

Second, you're storing the variable in the default page scope which is not shared among included JSP pages. Store it in request scope instead.

<c:set var="season" value="summer is here" scope="request" />

Update: as turns out per the comments, those JSPs do not participate in the same request. You should then grab the session scope (and be aware that this way the variable get exposed in all requests in all browser windows/tabs! this is not per-se desireable). You should only ensure that you're specifying the scope in every <c:set var="season">.

<c:set var="season" value="some value" scope="session" />

The EL expression ${season} will namely search for the first non-null attribtue in respectively the page, request, session and application scopes. So if you do a <c:set> without an explicit scope, then it will be stored in page scope and obtained in same page as such.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文