个人对ext+struts2 上传文件的一些总结(转http://xietingfengsxm.blog.163.com/blog/static/994118)

javascript 2010-08-10 19:14:44 阅读48 评论1   字号:大中小 订阅
前两天做了个ext+struts2表单上传文件的提交,提交没问题,提交后的参数返回出了问题,灰常灰常郁闷,发帖,查资料,最后成功,把一些东西总结一下,写的不好,不对,大家指正。
ext关键代码:
var addForm = new Ext.form.FormPanel(
  {
      id:'addForm',
      baseCls: 'x-plain',
      labelWidth: 75,
    fileUpload: true,
      method:'POST',
    enctype:'multipart/form-data',
//文件上传的话要这两句
/**
  *
  *这里省略一些其他表单配置
  *按钮配置也省略
  **/
//最后服务器返回信息处理
success:function(form,action){
  Ext.MessageBox.alert("Message", "Success");
},
failture:function(form,action){
  Ext.MessageBox.alert("Error", "Failture");
}
如果后台有执行到,但是页面无任何反应,那肯定是action的配置出了问题。首先配置有两种,一种是继承struts-default,另外一种是json-default.
如果用struts-default,有两种方案。配置多个result
即多个html/jsp页面, <result name="sucess">/suss.html </result>,
<result name="fail">/fail.html </result>, <result name="...">/... </result>
java代码处理业务,根据异常来决定跳到哪个页面,
如写文件失败,return "writefalse";
<result name="writefalse">/writefalse.html </result>
writefalse.html的内容只能是json格式的数据,{"success:false,info:写文件失败"}
这样页面的ext就会进入
failture:function(form,action){
  Ext.MessageBox.alert("Error", "Failture");
}
你在方法里取值action.result.info,内容就是 "写文件失败".
依次类推,成功页面suss.html的页面内容是{"success:true,info:成功"}
ext这个回调机制是检查返回参数是否有success键,并且它的值是true,就会调用
success:function(form,action){
},
其他{"success:false,info:asdadsad"},{"failture:true,info:asdad"}都是调用failture。即只要没有success:true,那么其他状况都将进入failtur方法。
struts-default的第二个方案是用response来传递参数。这个比较搞,resp.getWriter().write()的时候,不要忘了"[","]",不然解析不到......
错误:"{'success:true,info:asdad'}"
正确:"[{'success:true,info:asdad'}]"
另外是用jsondefault(推荐)使用,其他配置就不多说了,主要会碰到的情况,页面有响应,但是直接提示下载文件。这个时候,要在struts配置里添加一项param 把ContentType设为text/html,就不会出现下载页了。
然后用json返回的时候,也碰到了一个很搞的问题。
我们用json,一般定义一个
Map[] results =new Map[length](不要忘了get方法,不然前台取不到),
然后把我们的map元素一个个放进result里,然后返回。
但是到了表单这里,行不通,不能再返回一个Map数组,只能返回单个Map
Map results =new HashMap();
results .put("success","true");
results .put("info","sadad");
return SUCCESS;就可以了
如果
Map[] results =new HashMap[1];
Map map = new HashMap();
map.put("success","true");
map.put("info","sadad");
results[0]=map;
return SUCCESS;
这样页面就无法解析了,这里感觉有点整合的死了。
一些关键的东西,其实都能在ext的api里找到,多看api是关键。
与大家共勉,错误之处大家修正。

你可能感兴趣的:(html,json,struts,Blog,ext)