解决ext+struts文件上传,json返回结果无法读取到的问题

来源:互联网 发布:关于网络的小品剧本 编辑:程序博客网 时间:2024/06/06 16:42

1、问题描述

     ext在前端制作的文件上传,struts控制跳转,在后台返回json,前端无法解析后台返回的json信息。具体如下:

    (1)构造上传的表单

       function upload(){ 
                //initForm(); 
                uploadForm = new Ext.form.FormPanel({ 
                    fileUpload:true, //这个必须有,就跟指定jsp的form的enctype类型一样,不然就会出现问题. 
                    //frame: true,
                    waitMsgTarget: true, 
                    labelAlign: 'right', 
                    baseCls: 'x-plain', 
                    labelWidth: 145, 
                    defaultType: 'textfield', 
                    items: [{
                             fieldLabel:'请选择导入excel文件', 
                             id:'excelFile',
                             name:'excelFile', 
                             //xtype: 'fileuploadfield',
                       //xtype:'textfield',
                             readOnly : false, 
                             validator : isExcel, 
                             width : 300,
                             allowBlank : false,
                             inputType: 'file'//文件类型
                        }]
                }); 
                uploadWindow(uploadForm, '导入微公益信息'); 
            }

       (2)处理后,向后台提交

            //这里是选择文件,并且过滤掉其他文件类型.只能是Excel 
            function uploadWindow(formPanel, title){
                 
                //一次只能添加或者修改一条记录. 
                if(formWindow!=null){
                    formWindow.destroy(); 
                }
                 
                formWindow = new Ext.Window({
                    title: title, 
                    width: 500, 
                    height: 115, 
                    minWidth: 200, 
                    minHeight: 200, 
                    layout: 'fit', 
                    plain:true, 
                    bodyStyle:'padding:5px;', 
                    buttonAlign:'center', 
                    items: formPanel, 
                    buttons: [{
                        text: '导入', 
                        handler: function()
                        {
                            //var excelFile = Ext.get('excelFile').dom.value;
                            if (formPanel.form.isValid())
                            {
                                alert("成功进入");
                                 formPanel.form.doAction('submit',{
          url:base.host+'/microWelfareMng!importExcel.do',
          method:'POST',
          waitMsg: '正在导入...',
          success:function(form,action)
          { // post执行成功,即有返回值
           alert("导入成功");
           var data = Ext.util.JSON.decode(action.response.responseText);
           if(data.success=="true")
           {
            if(data.pojoMap.token == "0")
            {
            
            }
            if(data.pojoMap.token == "1")
            {
               
            }
                    }
          },
          failure:function(form,action)
          { // post时发生其他异常

             var results = Ext.util.JSON.decode(action.response.responseText);
             var actResult = results.success;
            var actMessage = results.errorMessage;
            alert(actMessage);
     
          }
        });
                          
                            }
                            else
                            {
                                Ext.MessageBox.alert('提交失败', '输入的数据有误!请检查对应红色提示框!');
                            }
                        }
                    },
                    {
                        text: '取消', 
                        handler: function()
                        { 
                            formWindow.destroy(); 
                        }
                   }]
                }); 
                formWindow.show();
            } 

2、问题分析

     前端设置了fileUpload:true,后台会将整个form当成文件流进行解析,后台出来完后,默认也将返回的json格式,当成文件流处理,造成在前端提示文件下载或保存。

3、问题解决

     需要将json当成文本来解析,设定response的内容类型为ContenType=text/html。其中一种方式,在struts2的框架下,可以这样解决:

<action name="microWelfareMng-*" class="actionMicroWelfare" method="{1}">
   <result name="json" type="json" >
       <param name="contentType">text/html</param>
    <param name="ignoreHierarchy">false</param>
   </result>
  </action>

参考:http://blog.csdn.net/h396071018/article/details/6730437

0 0
原创粉丝点击