如何调试JSF / EL

时间:2011-11-25 09:23:12

标签: eclipse debugging jsf jsf-2 el

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

2 个答案:

答案 0 :(得分:68)

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

<ui:debug />

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

热键可以通过hotkey属性进行配置,这样您就可以选择另一个与浏览器默认热键冲突的方式,就像在Firefox中一样; Ctrl Shift D 默认显示添加书签对话框。以下是 Ctrl Shift X 的方法:

<ui:debug hotkey="x" />

您通常也希望将其隐藏在非开发阶段,因此添加一个渲染条件:

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

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

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

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

答案 1 :(得分:5)

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

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