ExtJs学习篇---使用Extjs 加DWR 实现文件上传

当使用DWR调用Extjs的fileuploadfield 来做文件上传时,发现第一次调用可以正常执行,但不刷新页面的情况下,第二次调用就会出错。研究了DWR的源码,发现,每次调用DWR时,如果DWR发现您传的参数是个file类型的Input, dwr就会新建一个form,并且把你要上传的file input拿到他的form里去提交。同时,为了不影响页面,dwr会先把你传给他的file input 克隆一份,放在你原来的位置。正常情况下,这是没有问题的,可如果使用EXT的fileuploadfield, 问题就来了,ext的fileuploadfield实际上是一个普通的text input field和一个按钮,盖住了一个真正的fileinput, 这个真正的file input 会存在 fileuploadfield的fileInput域里,当dwr做了偷天换日的操作后,Ext就找不到自己的 fileInput了。

 

说了半天怎么解决呢?简单,这个事情不要让dwr做,我们自己来做,就可以了,找到dwr的engine.js, (在dwr.jar 的 org\directwebremoting\ 下面),把1808行的

var clone =value.cloneNode(true);

和 1812行的

value.parentNode.insertBefore(clone,value);

 

删掉(或者注释掉),重新打包的dwr.jar里

 

在每次调用文件上传的函数前,自己做相应的处理。类似以下的例子:

 

var  filefield = form.findField(‘myuploadfield’);

var  fileInputDom =filefield.fileInput.dom;

filefield.fileInput.dom= fileInputDom.cloneNode(true);

fileInputDom.parentNode.insertBefore(filefield.fileInput.dom,fileInputDom);

 

myfileService.uploadFile(fileInputDom, otherParams,callBackFunc(){ alert(‘upload ok’)});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值