前两天做了个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是关键。
与大家共勉,错误之处大家修正。