My JSF application has a <ui:debug>
tag in the top level template. I have a data item creation page that saves the item to the DB. The DB then returns the saved item which I store in the JSF flash. I then redirect to a new page and display the item that I retrieved from the flash. When I view the page, the Debug page is shown with a NullPointerException
and sometimes there is no stack trace and other times there is a stacktrace similar to (don't pay attention to the specific line numbers.
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)
...
If I remove the <ui:debug>
tag, then my page is successfully displayed. What is causing the NullPointerException?
Part of the job of the
<ui:debug>
tag is to display the contents of all the various JSF scopes including the "flash scope".DevTools.writeVariables
is a helper function that is used to turn the objects in the scopes into something readable to display in the debug page. It uses methods liketoString()
to display the objects. The object that was stored in the flash, overrode thetoString()
method with the following boilerplate codeSince the
toString()
was returning null, it later caused aNullPointerException
. If you properly implementtoString()
, this error will not occur.