我的JSF应用程序在顶级模板中有一个<ui:debug>
标记。我有一个数据项创建页面,将项目保存到数据库。然后DB返回我存储在JSF flash中的已保存项。然后我重定向到一个新页面并显示我从闪存中检索到的项目。当我查看页面时,Debug页面显示为NullPointerException
,有时没有堆栈跟踪,有时候堆栈跟踪类似于(不要注意特定的行号。
NullPointerException
at com.sun.facelets.util.DevTools.writeVariables(DevTools.java:158)
at com.sun.facelets.util.DevTools.writeVariables(DevTools.java:144)
at com.sun.facelets.util.DevTools.debugHtml(DevTools.java:135)
at com.sun.facelets.tag.ui.UIDebug.writeDebugOutput(UIDebug.java:92)
at com.sun.facelets.tag.ui.UIDebug.encodeBegin(UIDebug.java:81)
...
如果我删除<ui:debug>
标记,则表示我的网页已成功显示。导致NullPointerException的原因是什么?
答案 0 :(得分:1)
<ui:debug>
标记的部分工作是显示所有各种JSF范围的内容,包括“flash范围”。 DevTools.writeVariables
是一个辅助函数,用于将作用域中的对象转换为可在调试页面中显示的内容。它使用toString()
之类的方法来显示对象。存储在闪存中的对象使用以下样板代码覆盖toString()
方法
@Override
public String toString() {
//TODO: Supply implementation
return null
}
由于toString()
返回null,后来导致NullPointerException
。如果您正确实施toString()
,则不会发生此错误。