1

我的 JSF 应用程序<ui:debug>在顶级模板中有一个标记。我有一个将项目保存到数据库的数据项创建页面。然后数据库返回我存储在 JSF 闪存中的已保存项目。然后我重定向到一个新页面并显示我从闪存中检索到的项目。当我查看页面时,Debug页面显示为a 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?

4

1 回答 1

1

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

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

由于toString()返回 null,它后来导致了NullPointerException. 如果您正确实施toString(),则不会发生此错误。

于 2013-04-25T07:13:53.207 回答