2

我们有一个大量使用 JSTL 表达式和自定义标记库的应用程序,这意味着我们的 pageContext 属性几乎可以在任何地方设置。我该如何确定它们的来源?考虑类似的事情:

<c:out value="${ myObject['SOME_KEY'] }" />

我需要知道 myObject 的来源——它是如何进入 pageContext 的?我正在使用 IDEA,所以如果在 IDE 中有确定它的快捷方式,那将是最有帮助的。

编辑:

我不想知道范围,但该属性实际设置在哪个物理文件中。几乎与 IDEA 右键上下文菜单中的 Find Usages... 功能相同。如果我三岁时深入了解可能正在使用标记库和模板的 JSP,那么 pageContext 中的属性集几乎可以在任何地方设置。我想找到该属性的用法和实例。

4

1 回答 1

4

${myObject}基本解析为分别在页面、请求、会话和应用程序范围内jspContext.findAttribute("myObject")搜索属性并返回null它找到的第一个非值。

您可以制作一个 IDE 有多聪明,它无法事先(在构建/编译期间)知道它被设置在哪个范围内。需要考虑的因素太多(可见的和不可见的)。找出这一点的唯一可靠方法是通过在运行时显式访问所需的范围以编程方式进行:

"myObject" is in:
<br>Page scope? ${not empty pageScope.myObject}
<br>Request scope? ${not empty requestScope.myObject}
<br>Session scope? ${not empty sessionScope.myObject}
<br>Application scope? ${not empty applicationScope.myObject}

上面的示例应该返回true实际设置的范围之一。

于 2009-12-11T16:00:45.287 回答