【问题标题】:how to debug JSF/EL如何调试 JSF/EL
【发布时间】:2012-01-06 04:57:48
【问题描述】:

如何在JSF页面调试EL?我想看变量值,函数调用等等。最好的解决方案是 Eclipse 插件,但任何其他可能性都比猜测“为什么这个表达式无法正确呈现?”更好。

【问题讨论】:

    标签: eclipse debugging jsf jsf-2 el


    【解决方案1】:

    在 JSF/Facelets 中最接近的是将<ui:debug /> 放置在视图中的某处:

    <ui:debug />
    

    按下 CtrlShiftD 应该会显示一个弹出窗口,其中包含有关组件树和所有可用请求参数和请求/视图的调试信息/flash/session/application 范围的变量。它基本上代表了所有这些地图的内容。

    热键可以通过hotkey 属性进行配置,因此当它与浏览器默认热键冲突时,您可以选择另一个,就像在 Firefox 中一样; CtrlShiftD 默认会显示添加书签对话框。以下是如何让它在 CtrlShiftX 上收听:

    <ui:debug hotkey="x" />
    

    你通常也想在非开发阶段隐藏它,所以添加这样的渲染条件:

    <ui:debug hotkey="x" rendered="#{facesContext.application.projectStage == 'Development'}" />
    

    在显示的调试信息中,提供的有关作用域变量的信息并不像您期望的那么好。它只显示默认为com.example.Bean@hashcode 的所有作用域变量的Object#toString() 结果。您不能像在 Eclipse 调试器的调试视图中那样直接探索它们的属性和它们的属性值。您需要相应地在类上实现toString(),以便返回尽可能多的相关信息(如果需要,您甚至可以让 Eclipse 通过右键单击源代码 > Source > Generate toString() 自动生成它 em>):

    @Override
    public String toString() {
        return String.format("Bean[prop1=%s,prop2=%s,prop3=%s]", prop1, prop2, prop3);
    }
    

    对于方法调用,只需按照通常的方式在 Java 源代码上放置一个断点即可。当 EL 调用该方法时,Eclipse 也会在那里启动。如果它是一个托管 bean,您也只会在 Eclipse 调试器中看到它的属性。

    【讨论】:

    • 最后我使用普通的eclipse调试器结束ui:debug.
    • +1 让&lt;ui:debug&gt; 工作(对于工作的一个相当可悲的定义)
    • 嗨,BalusC,我想问一个类似的问题,但最好只是在这里发布......我在你的博客上关注了你的 Debug JSF lifecycle 文章。除了您在此处和那篇文章中建议的调试机制之外,是否可以深入研究 JSF 实现源代码?我对标签的看法有问题。渲染不如预期,我无法解释为什么会这样。我正在考虑深入研究 JSF 源代码。这是否有意义,如果可以,您能否指出我开始使用的资源?
    • @Murat:从所需 UIComponent 类的 encodeAll() 方法上的断点开始。
    • 嗨 BalusC,我已经尝试了您在此处提供的步骤,但它不起作用。我把 代码。我做错什么了吗?
    【解决方案2】:

    如果您确实遇到问题,那么如果您可以获得 EL 实现的源代码(对于 RI 来说足够简单),那么您可以使用 Eclipse 在 EL 实现方法中设置断点。您需要了解 EL 代码的工作原理,但它并不那么复杂。但不适合胆小的人。

    另一种可能性是以编程方式创建和评估 EL。有一些关于如何做到这一点的例子。然后,您可以使用调试器来摆弄表达式是什么以及结果是什么,直到找出问题所在。

    【讨论】:

      猜你喜欢
      • 2013-07-03
      • 2012-05-07
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 2012-07-12
      • 1970-01-01
      相关资源
      最近更新 更多