覆盖文件上传控件的上传功能

问题描述:

我想重写文件上传控件的上传功能,以添加我需要的功能。我试图通过改变第二个参数的类型从以下链接代码适应我的情况覆盖文件上传控件的上传功能

Auto-save doc after delete of attachment in File Download control?

com.ibm.xsp.component.xp.XSPFileUpload,即:

function rekOverrideFileDownloadAction(component:javax.faces.component.UIOutput, fDownload:com.ibm.xsp.component.xp.XSPFileUpload){ 

,并在mBinding的MethodBinding并通过我的文件上传控件的名称的代码,即:

var mBinding = facesContext.getApplication().createMethodBinding("#{javascript:print('Uploaded');}", null); 
overrideFileDownloadAction(getComponent('fileUpload1')); 

不幸的是,发生了一个javax.faces.FacesException。

任何人都可以帮助我修改此代码,以便在用户上传文件时仅打印此消息吗?

堆栈跟踪:

javax.faces.FacesException 
javax.faces.FacesException.<init>(FacesException.java:97) 
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:86) 
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:250) 
com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:209) 
com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:204) 
com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160) 
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:576) 
com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1281) 
com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:847) 
com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:796) 
com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565) 
com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1265) 
com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:653) 
com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:476) 
com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:341) 
com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:297) 
com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272) 

java.lang.NullPointerException 
com.ibm.xsp.actions.ActionGroup.invoke(ActionGroup.java:135) 
com.ibm.xsp.actions.ActionGroup.invoke(ActionGroup.java:135) 
com.ibm.xsp.application.ActionListenerImpl.processAction(ActionListenerImpl.java:60) 
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:1535) 
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:250) 
com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:209) 
com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:204) 
com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160) 
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:576) 
com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1281) 
com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:847) 
com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:796) 
com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565) 
com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1265) 
com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:653) 
com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:476) 
com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:341) 
com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:297) 
com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272) 

我也注意到,如果我添加脚本的事件,例如onChange,以便创建事件处理程序不会发生异常。所以我认为引发异常是因为没有事件处理程序,并导致一个空指针。现在我已经将我需要的功能添加到了onChange事件中,并且没关系,但如果有人能告诉我是否有方法来覆盖它,那将会很好。

预先感谢您!

+0

请,包括异常堆栈跟踪你...... – 2013-03-07 10:19:27

+0

为什么不使用的onChange?有用。无论如何,您需要调用完整刷新才能上传文件。 – 2013-03-11 20:30:28

+0

是的,这是我结束的解决方案。起初,我发现有关文件下载的片段,并尝试使用这种方法。感谢您的评论! – kmak 2013-03-12 13:39:02

你想做什么?我认为它不可能包含代码片段(它会覆盖下载链接的事件处理程序,该处理程序仅适用于上传控件)。

也许这个片段可以帮助你:http://openntf.org/XSnippets.nsf/snippet.xsp?id=replace-attachment-when-uploading-a-new-attachment

+0

谢谢!我会看看。我还编辑了试图澄清它的问题。我只是想知道是否有方法来重写上传功能的方式,片段显示fileDownload的删除功能。 – kmak 2013-03-08 15:01:46

+0

@kmak:上传控件没有可修改的事件/功能。 – 2013-03-08 19:08:10

+0

我向onChange事件添加了所需的功能,并且工作正常,但很高兴知道我的第一种方法失败的原因。感谢您的信息! – kmak 2013-03-12 13:43:55