JSF ui:debug导致NullPointerException

时间:2013-04-25 07:13:53

标签: jsf-2 flash-scope

我的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的原因是什么?

1 个答案:

答案 0 :(得分:1)

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

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

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