在Xpages中处理附件时遇到问题

在Xpages中处理附件时遇到问题,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我正在尝试编写一个类似引导的fileUpload/fileDownload自定义控件。我对它的外观相当满意(见下文) 然而,我的行为变得非常不一致。我非常希望用户能够点击删除按钮,附件被删除,重复控件被刷新。以类似的方式,如果用户选择“上传”,我认为附件应该上传到文档中,重复控件也应该刷新 我将附件存储在一个单独的文档中,该文档与主文档分离[它存储在与代码分离的数据库中] 我正在使用带有上载控件的js fileInput库 我正在使用重复控件来滚动我自己的文件下载查看器 代码在某些时候有效,但

我正在尝试编写一个类似引导的fileUpload/fileDownload自定义控件。我对它的外观相当满意(见下文)

然而,我的行为变得非常不一致。我非常希望用户能够点击删除按钮,附件被删除,重复控件被刷新。以类似的方式,如果用户选择“上传”,我认为附件应该上传到文档中,重复控件也应该刷新

我将附件存储在一个单独的文档中,该文档与主文档分离[它存储在与代码分离的数据库中]

我正在使用带有上载控件的js fileInput库

我正在使用重复控件来滚动我自己的文件下载查看器

代码在某些时候有效,但并不总是有效。当页面失败时,我会收到此错误消息(见下文)

如有任何建议,将不胜感激

Context Path: /scoApps/OTM1/OTM1.nsf
Page Name: /xpTest.xsp
javax.faces.FacesException
    at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:106)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:96)
    at com.ibm.xsp.controller.FacesControllerImpl.execute(FacesControllerImpl.java:256)
    at com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:228)
    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:576)
    at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1335)
    at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:853)
    at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:796)
    at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565)
    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.lang.IllegalArgumentException
    at javax.faces.model.ListDataModel.getRowData(ListDataModel.java:141)
    at com.ibm.xsp.component.UIRepeatContainer.addIndexedDataContext(UIRepeatContainer.java:173)
    at com.ibm.xsp.component.UIRepeatContainer.getDataContexts(UIRepeatContainer.java:86)
    at com.ibm.xsp.util.DataPublisher.getDataContextList(DataPublisher.java:349)
    at com.ibm.xsp.util.DataPublisher.revokeControlData(DataPublisher.java:271)
    at com.ibm.xsp.component.UIDataPanelBase.revokeControlData(UIDataPanelBase.java:319)
    at com.ibm.xsp.component.UIDataPanelBase.processDecodes(UIDataPanelBase.java:334)
    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1177)
    at com.ibm.xsp.component.UIRepeat.processDecodes(UIRepeat.java:526)
    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1177)
    at com.ibm.xsp.component.UIDataPanelBase.processDecodes(UIDataPanelBase.java:331)
    at javax.faces.component.UIForm.processDecodes(UIForm.java:166)
    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1177)
    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1177)
    at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:343)
    at com.ibm.xsp.component.UIViewRootEx._processDecodes(UIViewRootEx.java:1438)
    at com.ibm.xsp.component.UIViewRootEx.processDecodes(UIViewRootEx.java:1399)
    at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:98)

文件名删除]]>
]]>
0)
返回pdfImage;}]]>
 

它在ApplyRequestValues阶段失败,这与为repeat中的行运行代码有关。我以前在数据视图中使用过缓存was ID only。关键是确定哪个组件的代码失败(重复、链接、图像或按钮的值-如果是组件,则为哪个属性)以及是否需要在该阶段运行。可能不会

查看堆栈跟踪,getRowData()上的“caused by”位失败意味着重复的
值可能有问题,但我不能完全确定。它可能是repeat的一个子组件失败了

如果它是代码的只读位,则可以将其包装在
If(view.isRenderingPhase())
块中。只需确保输出的内容对其他阶段有效!例如,对于
呈现的
属性,将其他阶段的结果设置为
(我以前错过了这一点,导致了我自己的问题!)

如果是因为
文档
数据源未在该阶段初始化,则将所有内容包装在面板中可能会解决问题,方法是将dominoDocument数据源关联为面板的子级,这可能会鼓励它在restoreView阶段更好地重新初始化。这是一个彻头彻尾的秘密,但我知道在页面加载期间,dominoDocument数据源是面板的子级而不是XPage本身的子级,在不同的时间加载