如何确定JEAL表达式变量(pageContext属性)在IDEA中的起源?

时间:2009-12-11 15:51:10

标签: java jsp jstl taglib

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

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

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

编辑:

我不想知道范围,但是在实际设置属性的物理文件中。与IDEA的右键单击上下文菜单中的“查找用户...”功能几乎完全相同。如果我有三个深入到可能正在使用taglibs和templating的JSP中,则pageContext中的属性集可以在任何地方设置。我想找到该属性的用法和实例。

1 个答案:

答案 0 :(得分: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