如何在JSF页面中调试EL?我想观看变量值,函数调用等等。最好的解决方案是eclipse插件,但是任何其他可能性都比猜测更好"为什么这个表达式无法正确呈现?"。
答案 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。有一些如何做到这一点的例子。然后,您可以使用调试器来解决表达式是什么以及结果是什么,直到您解决了问题所在。