【问题标题】:Find which JSP set attribute as pageContext查找哪个 JSP 设置属性为 pageContext
【发布时间】:2015-04-22 13:04:53
【问题描述】:

我在JSP中有这样的语句(不是我的代码,我正在重写别人的代码):

String mode = (String)pageContext.findAttribute(IParameterName.POPUPMODE);

POPUPMODE 包含值(在我现在所在的调试期间)值:EDIT

在 Eclipse 中,我使用了“文件搜索”->“POPUPMODE”,它确实找到了另一个 JSP,在那里我找到了语句(为简洁起见):

String gnEditPopup = "popWindow('"+RequestUtility.getSiteURL(s1Request)+"?NEXT_PAGE="+I .... .... + IParameterName.POPUPMODE +"=" +I ....  user) +"</a>)"; 

然后在 IParameterName java 类中,我发现 'POPUPMODE' 常量确实有一个值 'EDIT'。

我找到了

<input type="hidden" name="<%=IParameterName.POPUPMODE%>" value="<%=mode%>">

我没有找到明确的“pageContext.setAttribute”。

现在我的问题是,我如何确定我找到了设置 'POPUPMODE' 属性的正确位置,以及更优雅的方法 - 更智能的方法来获取它,而不是使用文件搜索/文本搜索来搜索文件?

【问题讨论】:

    标签: jsp pagecontext


    【解决方案1】:

    pageContext.findAttribute 的 javadoc 说:

    在页面、请求、会话中搜索命名属性(如果有效), 和应用范围按顺序返回相关的值或 空。

    这里的重要部分是它正在寻找属性,而不是参数。您引用的作为属性可能来源的两个代码 sn-ps 改为表示为请求参数,除非您的应用程序的某些部分明确使它们如此,否则这些将不能用作请求/会话/应用程序属性。

    要追踪它会很棘手。我要尝试的第一件事是将pageContext.findAttribute 调用替换为对request.getAttributesession.getAttribute 的单独调用,然后查看其中哪个返回值。这至少会告诉您您是在谈论请求范围属性还是会话范围属性。然后任务变成找出应用程序的哪个部分正在获取请求参数并将其设置为属性。

    您还可以尝试编写一个自定义 servlet 过滤器,该过滤器包装传入的请求(使用 HttpServletRequestWrapper)并在调用 setAttribute 时进行记录。这不会捕捉到对HttpSession.setAttribute 的调用,但这是一个开始。

    【讨论】:

    • 谢谢。在整个项目中,“pageContext.setAttribute”只有 11 次出现,而且它们都没有与 EDIT 或 POPUPMODE 远程关联。我想这将是设置它的正确位置(为简洁起见缩短)?: String gnEditPopup = "popWindow('"+RequestUtility.getSiteURL(...)+"?NEXT_PAGE="+.... "&"+ IParameterName.POPUPMODE +"=" +IConstants.EDIT + ....DetailsUtility.buildAdminEditPageInfo(...)+"','gn_popup', 600, 400);";
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 2014-06-22
    • 2011-04-13
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多