Jsf XPAges:“;java.io.NotSerializableException:lotus.domino.local.Document“;
我有一个包含一个Notes文档的XPage。本页的目的只是显示文档的一些相关字段 第一次访问页面是可以的。而且,如果以后再次显示而不更改参考底图文档,也可以 但是当我从这个页面导航到另一个XPage,并在那里更改文档(是的,我有另一个专门编辑文档的页面),然后返回到“显示”页面时,我会在呈现响应阶段得到Jsf XPAges:“;java.io.NotSerializableException:lotus.domino.local.Document“;,jsf,serialization,xpages,viewstate,Jsf,Serialization,Xpages,Viewstate,我有一个包含一个Notes文档的XPage。本页的目的只是显示文档的一些相关字段 第一次访问页面是可以的。而且,如果以后再次显示而不更改参考底图文档,也可以 但是当我从这个页面导航到另一个XPage,并在那里更改文档(是的,我有另一个专门编辑文档的页面),然后返回到“显示”页面时,我会在呈现响应阶段得到java.io.NotSerializableException 奇怪:它是用于lotus.domino.local.Document。。。我从不想保存/序列化文档…:-o 我如何在代码中找到bu
java.io.NotSerializableException
奇怪:它是用于lotus.domino.local.Document
。。。我从不想保存/序列化文档…:-o
我如何在代码中找到bug:
nostate
”true
”${…}
”切换为“{…}
”)23.11.16 10:30: Exception Thrown
Context Path: /.../.../myApp.nsf
Page Name: /page_ShowData.xsp
com.ibm.xsp.FacesExceptionEx: java.io.NotSerializableException: lotus.domino.local.Document
at com.ibm.xsp.application.AbstractStateManager.saveSerializedView(AbstractStateManager.java:121)
at com.ibm.xsp.application.StateManagerImpl.saveSerializedView(StateManagerImpl.java:152)
at com.ibm.xsp.application.ViewHandlerExImpl._saveViewState(ViewHandlerExImpl.java:455)
at com.ibm.xsp.application.ViewHandlerExImpl.saveViewState(ViewHandlerExImpl.java:449)
at com.ibm.xsp.application.ViewHandlerExImpl._renderView(ViewHandlerExImpl.java:324)
at com.ibm.xsp.application.ViewHandlerExImpl.renderView(ViewHandlerExImpl.java:336)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:103)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:120)
at com.ibm.xsp.controller.FacesControllerImpl.render(FacesControllerImpl.java:270)
at com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:261)
at com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157)
at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160)
at com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138)
at com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)
at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:588)
at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1335)
at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:865)
at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:808)
at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:577)
at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1319)
at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662)
at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482)
at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357)
at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313)
at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)
Caused by: java.io.NotSerializableException: lotus.domino.local.Document
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1185)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at java.util.ArrayList.writeObject(ArrayList.java:728)
at sun.reflect.GeneratedMethodAccessor652.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1059)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1502)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at java.util.HashMap.writeObject(HashMap.java:942)
at sun.reflect.GeneratedMethodAccessor637.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1059)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1502)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179)
at java.io.ObjectOutputStream.writeUnshared(ObjectOutputStream.java:413)
at com.ibm.xsp.application.AbstractSerializingStateManager$FastObjectOutputStream.writeObjectEx(AbstractSerializingStateManager.java:438)
at com.ibm.xsp.application.AbstractSerializingStateManager$FastObjectOutputStream.writeObjectEx(AbstractSerializingStateManager.java:417)
at com.ibm.xsp.application.AbstractSerializingStateManager$FastObjectOutputStream.writeObjectEx(AbstractSerializingStateManager.java:417)
at com.ibm.xsp.application.AbstractSerializingStateManager$FastObjectOutputStream.writeObjectEx(AbstractSerializingStateManager.java:417)
at com.ibm.xsp.application.AbstractSerializingStateManager$FastObjectOutputStream.writeObjectEx(AbstractSerializingStateManager.java:417)
at com.ibm.xsp.application.AbstractSerializingStateManager.saveSerializedView(AbstractSerializingStateManager.java:294)
at com.ibm.xsp.application.AbstractSerializingStateManager.doSaveSerializedView(AbstractSerializingStateManager.java:269)
at com.ibm.xsp.application.FileStateManager.doSaveSerializedView(FileStateManager.java:290)
at com.ibm.xsp.application.FileStateManager.doSaveSerializedView(FileStateManager.java:270)
at com.ibm.xsp.application.AbstractStateManager.saveSerializedView(AbstractStateManager.java:114)
... 25 more
我的页面_ShowData.xsp:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" pageTitle="Show Data"
xmlns:xc="http://www.ibm.com/xsp/custom"
xmlns:xe="http://www.ibm.com/xsp/coreex" readonly="true"
viewState="nostate"
afterPageLoad="#{javascript:print('page_ShowData.afterPageLoad()');}">
<!-- ... -->
<xp:this.data>
<xp:dominoDocument var="stamm" formName="Masterdata" ignoreRequestParams="false">
<xp:this.action>
<![CDATA[#{javascript:
// ensure to set the unid if known
if (viewScope.stammid == null){
viewScope.stammid = param.get('documentId');
}
if(typeof viewScope.stammid == "undefined" || viewScope.stammid == null || viewScope.stammid == ""){
return; // empty means 'create'
} else {
return 'openDocument';
}
}]]>
</xp:this.action>
<xp:this.documentId>
<![CDATA[#{javascript:return viewScope.stammid;}]]>
</xp:this.documentId>
<xp:this.postOpenDocument>
<![CDATA[#{javascript:
<!-- set some viewScope vars -->
}]]>
</xp:this.postOpenDocument>
<xp:this.postNewDocument>
<![CDATA[#{javascript:
<!-- set some viewScope vars -->
}]]>
</xp:this.postNewDocument>
</xp:dominoDocument>
</xp:this.data>
<!-- ... -->
<xp:this.beforeRenderResponse>
<![CDATA[#{javascript:
try{
// print all viewScope vars
var vsKeys:java.util.Set = viewScope.keySet();
for (var k in vsKeys){
var v = viewScope.get(k);
print('viewScope - ['+k.toString()+'] (serializable='+(k instanceof java.io.Serializable)+') = ['+v+'] (instance='+(typeof v)+', serializable='+(v instanceof java.io.Serializable)+')');
}
}]]>
</xp:this.beforeRenderResponse>
<!-- some UI content -->
</xp:view>
}]]>
}]]>
在这两个XPages中的一个上,您正在将NotesDocument(不是DominoDocument数据源,而是NotesDocument对象)存储在范围变量中。Domino对象不可序列化,这就是引发错误的原因。最有可能的位置是您要从中移动的页面
如果需要访问特定文档,请将文档的UNID存储在作用域变量中,并使用
database.getDocumentByUNID()
检索它。这几乎可以肯定是DominoDocument数据源所做的。在这两个XPage中的一个上,您正在将NotesDocument(不是DominoDocument数据源,而是NotesDocument对象)存储在作用域变量中。Domino对象不可序列化,这就是引发错误的原因。最有可能的位置是您要从中移动的页面
如果需要访问特定文档,请将文档的UNID存储在作用域变量中,并使用
database.getDocumentByUNID()
检索它。这几乎可以肯定是DominoDocument数据源所做的。好的,谢谢您的评论。我已经知道不能将NotesDocument存储在作用域变量中。这就是为什么我要记录viewScope变量作为发现bug的第一步。但所有变量都是布尔或字符串。。。实际上,我不想保存或缓存文档。问题是,如何找到将文档放入作用域的代码片段。。。但是你给了我一个很好的提示:我只查看了我的目标页面(只读页面),也许我必须查看我的源页面(可编辑页面)。我稍后会在这里写我的结果……是否可能是某个UIControl或数据源具有解析为NotesDocument的计算属性?ie而不是范围变量。也许有一个线索是writeObjectEx在它的第6个递归中,所以想想在作用域/控制树中大约有6个深度的东西。您是否100%确定错误来自“显示”页面?如果您从编辑页面切换回来,编辑页面不是正在序列化的页面吗?所以。你们都是对的:错误来自目标页面。有一个由同事创建的自定义控件。他有一个NotesDocument作为(计算的)数据源。在我跳出窗外之前,他发现了错误并向我报告:-)谢谢你的帮助!!!!好的,谢谢你的评论。我已经知道不能将NotesDocument存储在作用域变量中。这就是为什么我要记录viewScope变量作为发现bug的第一步。但所有变量都是布尔或字符串。。。实际上,我不想保存或缓存文档。问题是,如何找到将文档放入作用域的代码片段。。。但是你给了我一个很好的提示:我只查看了我的目标页面(只读页面),也许我必须查看我的源页面(可编辑页面)。我稍后会在这里写我的结果……是否可能是某个UIControl或数据源具有解析为NotesDocument的计算属性?ie而不是范围变量。也许有一个线索是writeObjectEx在它的第6个递归中,所以想想在作用域/控制树中大约有6个深度的东西。您是否100%确定错误来自“显示”页面?如果您从编辑页面切换回来,编辑页面不是正在序列化的页面吗?所以。你们都是对的:错误来自目标页面。有一个由同事创建的自定义控件。他有一个NotesDocument作为(计算的)数据源。在我跳出窗外之前,他发现了错误并向我报告:-)谢谢你的帮助!!!!