jsp范围的PagesContext

时间:2013-07-06 03:02:49

标签: jsp

哪些值可以是

的第三个属性

javax.servlet.jsp.PageContext.setAttribute(String name, Object value, int scope)可以带?

据我所知,这个属性是一个枚举,我所知道的可能值是PageContext.APPLICATION_SCOPE
PageContext.SESSION_SCOPEPageContext.RESPONSE_SCOPEPageContext.PAGE_SCOPE。这是完整的价值观吗?

这是如何“阅读”

的问题

http://docs.oracle.com/javaee/6/api/javax/servlet/jsp/JspContext.html#setAttribute%28java.lang.String,%20java.lang.Object,%20int%29

http://docs.oracle.com/javaee/6/api/javax/servlet/jsp/PageContext.html

- 如果我没有遗漏任何东西,它们就不太具体了。

// =================================

编辑:扩展问:

有没有办法在JSP中同时设置所有applicationsessionpageContext的属性。 - 隐式使用方法(可能是 pageContext )或作为方法的副作用 ( context 也许 - 来自servlet,这次也可以做其他事情?)

据我所知,这四个范围(requestcontextsessionpageContext)中的每一个都可以拥有完全不同的属性集和值, 如果我想将属性传递给contextsession,我必须分别调用他们的setAttribute()

// =====================

编辑:日食编辑讲述了某些事情。这可能是一个早期的问题。

2 个答案:

答案 0 :(得分:0)

此参数不是枚举,而是普通int。 PageContext.APPLICATION_SCOPE等是PageContext中的常量(public static final int)变量。可以在以下链接中找到完整的值集:

我没有理由在不同的范围内设置相同的值。如果您需要一个全局值(对整个应用程序),您将使用应用程序范围不是吗?如果在不同的作用域中设置相同的内容,则需要在会话,请求和页面等限制较多的作用域中多次重置相同的值。

顺便说一下,它不是PageContext。 RESPONSE_SCOPE ,但是PageContext。 REQUEST_SCOPE

答案 1 :(得分:0)

正如David上面所说,如果你需要访问一个值,你应该将它设置为最广泛的范围,而不是试图再次重置它 - 如果你在应用程序范围设置了一个属性,你就可以访问它无处不在不需要在请求上设置它。这将是多余的。

如果您不知道设置变量的范围,可以在上下文中使用findAttribute方法,该方法将从页面范围&向上移动请求,会话和&应用程序范围,直到找到该属性。