最近在用ext3做一些小东西,用了它是上传控件,遇到了一些问题。记录一下。
对于文件上传来说,需要注意以下几个方面:
- 在FormPanel中设置一个属性【fileUpload : 'true'】;
<!--[if !supportLists]-->2. <!--[endif]-->在jsp页面中引入FileUploadField.js文件,这个文件的路径是【"${pageContext.request.contextPath}/ux/fileuploadfield/FileUploadField.js"】;
UI组件 | 相应的ExtJS属性(主要部分) | 后台Java Bean属性 |
xtype : 'fileuploadfield' | 需要定义name属性,name : 'xyz' | Struts1/2是不同的,这里以struts2为例。根据情况,需要定义三个属性中的某个或某几个。它们分别是: File xyz; --- 真正的文件; String xyzFileName; --- 文件名字; String xyzContentType; --- 文件类型; 多文件上传时,需要将属性定义为List类型; |
这里需要注意的是:文件上传一样受struts的文件上传大小的限制。
在调用此方法时会发现json返回值被加上(<pre>{success:true, msg:'成功'}</pre>)
ext-all.js里报错。
IE,fox里都报错,
在网上找了下,有人在改ext-all.js
再上网找了下发现在处理文件里设置Response.ContentType = "text/html";
就不会再报错了 记录下来
上面是网上的一办法,不过我在设置 Response.ContentType = "text/html"时,页面会弹出下载文件提示,不知道为什么,最后重写了ext的submit方法如下:
Ext.override(Ext.form.Action.Submit,{ processResponse : function(response){ this.response = response; var data = response.responseText; if(data.indexOf('<pre') != -1) { response.responseText = data.substring(data.indexOf("{"), data.indexOf("}")+1); this.response = Ext.util.JSON.decode(response.responseText); } if(!response.responseText){ return true; } return this.result; } });