我遇到一个问题,我试图在JSP页面中设置一个变量,该变量应该对提供此请求的所有其他页面都可用。
<c:set value="foo" scope="request" var="bar" />
但是,当我尝试从另一个页面(将所有内容放在一起的主JSP)中读取变量时,它是空的。该永远会发生吗?在我们的渲染机制中是否需要注意什么? (我已经编写了一些打印请求对象的内存位置的小脚本,并且在两个页面上都是相同的。)当我在会话范围内编写它时,它可以工作,但应该为每个请求重置变量。
如何调试该问题?
我正在使用Tomcat 5.5.28(绝对无法升级到6)。知道它的JSP实现中有错误吗?
答案 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。
我建议尝试会话范围。