JSF ui:调试导致NullPointerException



我的JSF应用程序在顶层模板中有一个<ui:debug>标记。我有一个数据项创建页面,它将项目保存到数据库中。然后,DB返回我存储在JSF flash中的已保存项。然后重定向到一个新页面并显示从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?

<ui:debug>标记的部分工作是显示所有各种JSF作用域的内容,包括"flash作用域"。DevTools.writeVariables是一个辅助函数,用于将作用域中的对象转换为可读的内容,以便在调试页面中显示。它使用toString()之类的方法来显示对象。存储在flash中的对象,使用以下样板代码

覆盖toString()方法
@Override
public String toString() {
  //TODO: Supply implementation
  return null
}

由于toString()返回null,它随后引起NullPointerException。如果您正确地实现了toString(),则不会出现此错误。

相关内容

最新更新