解决Extjs与DWR3文件上传冲突:自定义处理方式
4星 · 超过85%的资源 需积分: 10 14 浏览量
更新于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组件的内部逻辑,从而实现连续的文件上传功能,即使在不刷新页面的情况下也能正常工作。需要注意的是,这可能需要根据具体项目的配置和代码结构进行调整,以确保改动不会影响其他功能的正常运行。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2014-01-17 上传
2019-03-06 上传
2012-04-24 上传
2008-08-06 上传
2023-03-28 上传
点击了解资源详情
cfy_gamma
- 粉丝: 1
- 资源: 3
最新资源
- 俄罗斯RTSD数据集实现交通标志实时检测
- 易语言开发的文件批量改名工具使用Ex_Dui美化界面
- 爱心援助动态网页教程:前端开发实战指南
- 复旦微电子数字电路课件4章同步时序电路详解
- Dylan Manley的编程投资组合登录页面设计介绍
- Python实现H3K4me3与H3K27ac表观遗传标记域长度分析
- 易语言开源播放器项目:简易界面与强大的音频支持
- 介绍rxtx2.2全系统环境下的Java版本使用
- ZStack-CC2530 半开源协议栈使用与安装指南
- 易语言实现的八斗平台与淘宝评论采集软件开发
- Christiano响应式网站项目设计与技术特点
- QT图形框架中QGraphicRectItem的插入与缩放技术
- 组合逻辑电路深入解析与习题教程
- Vue+ECharts实现中国地图3D展示与交互功能
- MiSTer_MAME_SCRIPTS:自动下载MAME与HBMAME脚本指南
- 前端技术精髓:构建响应式盆栽展示网站