解决Extjs与DWR3文件上传冲突:自定义处理方式
4星 · 超过85%的资源 需积分: 10 133 浏览量
更新于2024-09-18
1
收藏 28KB DOC 举报
在使用Extjs的fileuploadfield结合DWR3进行文件上传时,开发者可能会遇到一个常见的问题:首次调用能够成功,但在不刷新页面的情况下,第二次调用就会失败。这个问题主要源于DWR3在处理文件上传请求时的工作机制。
DWR在检测到用户传递的是一个file类型的Input时,会自动创建一个新的form,并将文件输入元素(file input)添加到该form中以进行提交。同时,为了保持页面的可见性,DWR会将原始的file input复制并插入回原位置,这在常规情况下的确没有问题。然而,对于Extjs的fileuploadfield而言,其内部结构比较特殊,它实际上是由一个文本输入框(textinput field)和一个按钮组成的,真实文件输入隐藏在其下。当DWR的这种处理方式与Extjs的隐藏结构冲突时,Extjs无法找到其原有的file input,导致后续操作失效。
要解决这个问题,关键在于控制DWR的行为,避免其直接操作Extjs组件的底层结构。在DWR的engine.js(通常位于dwr.jar的org\directwebremoting目录下)中,可以看到两个可能引起问题的代码行:第1808行的`var clone = value.cloneNode(true);`和第1812行的`value.parentNode.insertBefore(clone, value);`。这两个操作涉及到了对file input的克隆和替换。
为避免这些问题,建议注释或删除这些代码,然后在调用文件上传函数之前,手动处理Extjs组件的file input。例如,可以使用以下代码:
```javascript
var fileField = form.findField('myuploadfield');
var fileInputDom = fileField.fileInput.dom;
fileField.fileInput.dom = fileInputDom.cloneNode(true);
fileInputDom.parentNode.insertBefore(fileField.fileInput.dom, fileInputDom);
// 调用DWR服务上传文件
myfileService.uploadFile(fileInputDom, otherParams, function(callBackFunc){
alert('uploadok');
});
```
通过这种方式,我们可以确保DWR不会干扰Extjs组件的内部逻辑,从而实现连续的文件上传功能,即使在不刷新页面的情况下也能正常工作。需要注意的是,这可能需要根据具体项目的配置和代码结构进行调整,以确保改动不会影响其他功能的正常运行。
2023-05-12 上传
2024-01-19 上传
2023-04-27 上传
2023-05-14 上传
2023-06-22 上传
2023-07-24 上传
cfy_gamma
- 粉丝: 1
- 资源: 3
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全