【问题标题】:Writing a variable into the JSP request scope doesn't work将变量写入 JSP 请求范围不起作用
【发布时间】:2009-12-15 10:55:05
【问题描述】:

我有一个问题,我试图在 JSP 页面中设置一个变量,该变量应该可用于处理此请求的所有其他页面。

<c:set value="foo" scope="request" var="bar" />

但是,当我尝试从另一个页面(将所有内容放在一起的主 JSP)中读取变量时,它是空的。这应该永远发生吗?在我们的渲染机制中我需要注意什么吗? (我已经编写了一些小脚本来打印请求对象的内存位置,并且在两个页面上都是相同的。)当我在会话范围内编写它时,它可以工作,但是应该为每个请求重置变量。

如何调试该问题?

我使用的是 Tomcat 5.5.28(肯定不能升级到 6)。是否已知其 JSP 实现中存在错误?

【问题讨论】:

  • 给出其余代码的一些有意义的部分。例如,您的包含。
  • 您如何包含来自您的主 JSP 的 JSP?如果您正在执行子请求,则可能不会传播请求范围(我认为...)
  • 如何进行子请求?使用 jsp:forward 标签?问题是渲染机制又大又复杂,所以说实话,我不能确定到底发生了什么。

标签: jsp tomcat


【解决方案1】:

我使用的是 Tomcat 5.5.28(肯定不能升级到 6)。是否已知其 JSP 实现中存在错误?

假设错误是您的错误。我通常发现,当人们认为他们在软件中发现了一个错误时,这实际上只是一些不符合他们对事情如何运作的错误假设的行为。有时会发现错误,但很少见。特别是对于像 JVM 这样已经被广泛使用很长时间的东西。

来自太阳:

Bean存在的作用域和id中命名的变量可用。默认值为页面。不同作用域的含义如下:

页面 - 您可以将 JSP 页面中的 Bean 与元素或页面的任何静态包含文件一起使用,直到页面将响应发送回客户端或将请求转发到另一个文件。

request - 您可以使用来自任何 JSP 页面的 Bean 处理相同的请求,直到 JSP 页面向客户端发送响应或将请求转发到另一个文件。可以使用 request 对象来访问 Bean,例如 request.getAttribute(beanInstanceName)。

session - 您可以在与创建 Bean 的 JSP 页面相同的会话中使用来自任何 JSP 页面的 Bean。 Bean 存在于整个会话中,任何参与会话的页面都可以使用它。您在其中创建 Bean 的页面必须具有 session=true 的 指令。

应用程序 - 您可以在与创建 Bean 的 JSP 页面相同的应用程序中使用来自任何 JSP 页面的 Bean。 Bean 存在于整个 JSP 应用程序中,应用程序中的任何页面都可以使用 Bean。

我建议尝试会话范围。

【讨论】:

  • 我已经尝试过会话范围并且有效。不过,我想为每个请求重置变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 2015-03-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多