如何debuggingJSF / EL

如何在JSF页面debuggingEL? 我想看variables值,函数调用等等。 最好的解决scheme是一个eclipse插件,但是任何其他的可能性都比猜测“为什么这个expression式不能正确渲染?”更好。

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

 <ui:debug /> 

然后按下Ctrl Shift D应该显示一个popup窗口,其中包含有关组件树和所有可用请求参数以及请求/查看/闪存/会话/应用程序范围variables的debugging信息。 这基本上是所有这些地图的内容的表示。

这个热键可以通过hotkey属性进行configuration,这样您就可以在浏览器默认的热键冲突时select另一个热键,就像在Firefox中那样。 Ctrl + D将默认显示添加书签对话框。 下面是如何使它能够在Ctrl Shift X上进行监听:

 <ui:debug hotkey="x" /> 

你通常也想隐藏它在非发展阶段,所以添加一个像这样呈现的条件:

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

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

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

至于方法调用,通常只需要在Java源代码上放置一个断点即可。 当EL调用这个方法的时候,Eclipse也会在里面踢。 如果它是一个托pipebean,那么您也将在Eclipsedebugging器中看到它的属性。

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

另一种可能性是以编程方式创build和评估EL。 有一些如何做到这一点的例子。 然后,您可以使用debugging器来debuggingexpression式和结果,直到找出问题所在。