多FileDownload控件多次删除后Xpages文档无法保存问题
多组FileUpload/FileDownload控件在OpenNTF Domino库启用时保存失败问题
我开发了一个包含多组FileUpload和支持删除操作的FileDownload控件的XPage,执行以下操作后点击Save按钮会出现保存失败:
- 为第一个字段添加附件,删除后重新添加附件;
- 为第二个字段执行同样的添加-删除-重新添加附件操作;
- 点击Save按钮。
报错提示保存数据源document1时发生异常,底层为NullPointerException,堆栈指向DominoRichTextItem类的updateMultipartRelated方法。经测试,仅使用一组控件时无此问题;排查发现问题与Xsp Properties中启用org.openntf.domino.xsp.XspLibrary库相关。
XPage源码
<?xml version="1.0" encoding="UTF-8"?> <xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom"> <xp:this.data> <xp:dominoDocument var="document1"></xp:dominoDocument> </xp:this.data> <xp:div id="divFLControl1"> <xp:label value="Car photo" id="label25"></xp:label> <xp:fileUpload id="flUpload1" styleClass="file"> <xp:this.value><![CDATA[#{document1.photoCar}]]></xp:this.value> <xp:this.accept><![CDATA[#{javascript:"image/bmp,image/jpeg,image/png,application/pdf,text/plain,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,video/mpeg,video/x-msvideo,video/mp4,video/x-ms-wmv"}]]></xp:this.accept> <xp:eventHandler event="onchange" submit="true" refreshMode="partial" disableValidators="true" refreshId="divFLControl1"></xp:eventHandler> </xp:fileUpload> <xp:message id="message1" for="flUpload1"></xp:message> <xp:fileDownload rows="30" id="fileDownload1" displayLastModified="false" hideWhen="true" styleClass="table table-striped table-hover table-bordered" displayType="false" allowDelete="true"> <xp:this.value><![CDATA[#{document1.photoCar}]]></xp:this.value> </xp:fileDownload> </xp:div> <xp:div id="divFLControl2"> <xp:label value="Bus Photo" id="label1"></xp:label> <xp:fileUpload id="fileUpload2" styleClass="file" value="#{document1.photoBus}"> <xp:this.accept><![CDATA[#{javascript:"image/bmp,image/jpeg,image/png,application/pdf,text/plain,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,video/mpeg,video/x-msvideo,video/mp4,video/x-ms-wmv"}]]></xp:this.accept> <xp:eventHandler event="onchange" submit="true" refreshMode="partial" disableValidators="true" refreshId="divFLControl2"></xp:eventHandler> </xp:fileUpload> <xp:message id="message2" for="flUpload2"></xp:message> <xp:fileDownload rows="30" id="fileDownload2" displayLastModified="false" hideWhen="true" styleClass="table table-striped table-hover table-bordered" displayType="false" allowDelete="true" value="#{document1.photoBus}"> </xp:fileDownload> </xp:div> <xp:button value="Save" id="button1"> <xp:eventHandler event="onclick" submit="true" refreshMode="complete" immediate="false" save="true"></xp:eventHandler> </xp:button> </xp:view>
报错堆栈信息
Unexpected runtime error The runtime has encountered an unexpected error. Error source Page Name:/claim26.xsp Exception Error saving data source document1 ▼ Stack Trace javax.faces.FacesException: Error saving data source document1 com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:102) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:96) com.ibm.xsp.controller.FacesControllerImpl.execute(FacesControllerImpl.java:256) com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:231) com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157) com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:163) com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138) com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103) com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:600) com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1352) com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:877) com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:820) com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:589) com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1336) com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:725) com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:515) com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357) com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313) com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272) com.ibm.xsp.FacesExceptionEx: Error saving data source document1 com.ibm.xsp.util.FacesUtil.save(FacesUtil.java:585) com.ibm.xsp.util.FacesUtil.save(FacesUtil.java:552) com.ibm.xsp.component.UIViewRootEx.save(UIViewRootEx.java:1200) com.ibm.xsp.component.UIViewRootEx.save(UIViewRootEx.java:1189) com.ibm.xsp.application.ActionListenerImpl.processAction(ActionListenerImpl.java:78) javax.faces.component.UICommand.broadcast(UICommand.java:324) com.ibm.xsp.component.UIEventHandler.broadcast(UIEventHandler.java:366) com.ibm.xsp.component.UIViewRootEx.broadcast(UIViewRootEx.java:1669) javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:307) javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:428) com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:94) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:96) com.ibm.xsp.controller.FacesControllerImpl.execute(FacesControllerImpl.java:256) com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:231) com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157) com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:163) com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138) com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103) com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:600) com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1352) com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:877) com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:820) com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:589) com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1336) com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:725) com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:515) com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357) com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313) com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272) java.lang.NullPointerException com.ibm.xsp.model.domino.wrapped.DominoRichTextItem.updateMultipartRelated(DominoRichTextItem.java:1968) com.ibm.xsp.model.domino.wrapped.DominoRichTextItem.addMimeToStream(DominoRichTextItem.java:1931) com.ibm.xsp.model.domino.wrapped.DominoRichTextItem.updateRTMime(DominoRichTextItem.java:1911) com.ibm.xsp.model.domino.wrapped.DominoRichTextItem.updateRichTextItem(DominoRichTextItem.java:1581) com.ibm.xsp.model.domino.wrapped.DominoDocument.applyChangesToDoc(DominoDocument.java:2026) com.ibm.xsp.model.domino.wrapped.DominoDocument.applyChanges(DominoDocument.java:1995) com.ibm.xsp.model.domino.wrapped.DominoDocument.save(DominoDocument.java:1356) com.ibm.xsp.model.domino.DominoDocumentData.doSaveDocument(DominoDocumentData.java:684) com.ibm.xsp.model.AbstractDocumentDataSource.save(AbstractDocumentDataSource.java:76) com.ibm.xsp.model.AbstractDataSource._saveData(AbstractDataSource.java:553) com.ibm.xsp.model.AbstractDataSource.save(AbstractDataSource.java:534) com.ibm.xsp.util.FacesUtil.save(FacesUtil.java:577) com.ibm.xsp.util.FacesUtil.save(FacesUtil.java:552) com.ibm.xsp.component.UIViewRootEx.save(UIViewRootEx.java:1200) com.ibm.xsp.component.UIViewRootEx.save(UIViewRootEx.java:1189) com.ibm.xsp.application.ActionListenerImpl.processAction(ActionListenerImpl.java:78) javax.faces.component.UICommand.broadcast(UICommand.java:324) com.ibm.xsp.component.UIEventHandler.broadcast(UIEventHandler.java:366) com.ibm.xsp.component.UIViewRootEx.broadcast(UIViewRootEx.java:1669) javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:307) javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:428) com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:94) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:96) com.ibm.xsp.controller.FacesControllerImpl.execute(FacesControllerImpl.java:256) com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:231) com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157) com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:163) com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138) com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103) com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:600) com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1352) com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:877) com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:820) com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:589) com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1336) com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:725) com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:515) com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357) com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313) com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)
Xsp Properties相关配置
xsp.library.depends=com.ibm.xsp.extlib.library,com.ibm.xsp.extlib.relational.library #xsp.library.depends=com.ibm.xsp.extlib.library,com.ibm.xsp.extlib.relational.library,org.openntf.domino.xsp.XspLibrary org.openntf.domino.xsp=godmode,khan,marcel
内容的提问来源于stack exchange,提问作者jcb
相关产品推荐
相关产品推荐

