【问题标题】:Debugging inside a JSP page?在 JSP 页面中调试?
【发布时间】:2016-11-12 05:38:53
【问题描述】:

我正在使用 Java 1.6、Spring 3.4、Spring Webflow 2.3.2 和 Tomcat 7。我正在尝试调试一个使用以下 EL 表达式的 JSP 页面:

<c:if test="${myObject.myThing == SomeClass.ENUMVALUE.myvalue}"  >

myObject 对象作为 Webflow 模型对象传入。我在这条线上设置了一个断点,我可以到达它并打破它,但是我尝试“观察”或“评估”的任何东西都会给我一条错误消息。我得到了

${myObject.myThing == SomeClass.ENUMVALUE.myvalue}:  Invalid Expression

myObject.myThing:  Type is unknown for 'myObject'

(MyCorrectType) myObject:  Cannot find local variable 'myObject'

我怎么能找到这个模型对象?当它到达 JSP 页面时,它包含了什么?

【问题讨论】:

  • 如果操作正确,它将位于HttpServletRequest 属性中。
  • 如何将 myObject 传递给 JSP?我们能看到那个代码吗?
  • 是的,原来是在请求中,不是很直观。我已经记录了我在下面的答案中找到的内容。感谢您的帮助。

标签: java spring jsp spring-webflow


【解决方案1】:

结果证明它将在 org.apache.catalina.connector.Request 对象中(在我的特定情况下,它被埋在包装器对象的深处。)

如果您正在使用调试器,例如 Intellij 中的调试器(我使用的),您可以通过评估表达式 request.getAttribute("attributeName") 来获取单个属性(如 Webflow 模型对象)的值。请注意,这可能会返回 Java Object 类型,您可能必须将其强制转换为正确的类型。

例如,在我的例子中,我能够使用这个表达式找到我想要的值的值:

((MyObject)(request.getAttribute("myObject"))).getMyThing()

我希望这对某人有所帮助。

【讨论】:

    【解决方案2】:

    在 IDEA 2016.2 request 中的 JSP 调试不再起作用:(

    可以获取属性为

    _jspx_page_context.request.getAttribute("...")
    

    (内部标记为parentTag.requestContext.request.getAttributeNames())

    也可以在提供的范围内添加对 jasper 的项目依赖:

        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>jasper</artifactId>
            <version>6.0.47</version>
            <scope>provided</scope>
        </dependency>
    

    并使用自动完成:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      相关资源
      最近更新 更多