将变量写入JSP请求范围不起作用

时间:2009-12-15 10:55:05

标签: jsp tomcat

我遇到一个问题,我试图在JSP页面中设置一个变量,该变量应该对提供此请求的所有其他页面都可用。

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

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

如何调试该问题?

我正在使用Tomcat 5.5.28(绝对无法升级到6)。知道它的JSP实现中有错误吗?

1 个答案:

答案 0 :(得分:2)

  

我正在使用Tomcat 5.5.28(绝对无法升级到6)。知道它的JSP实现中有错误吗?

假设您的错误是您的错误。我经常发现,当人们认为他们在一个软件中发现了一个错误时,实际上只是某种行为不符合他们对事情如何运作的错误假设。有时会发现错误,但它们很少见。特别是像JVM这样长期存在的东西。

来自Sun:

  

Bean存在的范围和id中指定的变量可用。默认值为page。不同范围的含义如下所示:

     

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

     

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

     

session - 您可以在与创建Bean的JSP页面相同的会话中的任何JSP页面中使用Bean。 Bean存在于整个会话中,参与会话的任何页面都可以使用它。您在其中创建Bean的页面必须具有&lt;%@ page%&gt; session = true。

     

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

我建议尝试会话范围。