Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc Internet Explorer 8和9中的Ext Js文件字段问题_Spring Mvc_Extjs4.2 - Fatal编程技术网

Spring mvc Internet Explorer 8和9中的Ext Js文件字段问题

Spring mvc Internet Explorer 8和9中的Ext Js文件字段问题,spring-mvc,extjs4.2,Spring Mvc,Extjs4.2,我的表单中有一个文件字段。 当我通过controller提交表单时,IE显示安全栏,表明我正在尝试将文件下载到计算机,这与我正在做的完全相反(我正在上载文件)。 当我使用FF将表单提交到服务器时,一切都很好。但是IE8和IE9出现了一个问题 控制器操作: var myForm = Ext.getCmp('uploaddraftpcpPanel').getForm(); // get the basic form if (myForm.isValid()) { // make sure the f

我的表单中有一个文件字段。 当我通过controller提交表单时,IE显示安全栏,表明我正在尝试将文件下载到计算机,这与我正在做的完全相反(我正在上载文件)。 当我使用FF将表单提交到服务器时,一切都很好。但是IE8和IE9出现了一个问题

控制器操作:

var myForm = Ext.getCmp('uploaddraftpcpPanel').getForm(); // get the basic form
if (myForm.isValid()) { // make sure the form contains valid data before submitting
    myForm.submit({


        headers: {
            enctype: 'multipart/form-data; charset=UTF-8'
        },
        url: 'upload/uploaddraftpcp.action',


        success: function (myForm, action) {
            Ext.Msg.alert('success', "success");
        },
        failure: function (myForm, action) {
            Ext.Msg.alert('Failed', "failed");
        }
    });


} else { // display error alert if the data is invalid
    Ext.Msg.alert('Invalid Data', 'Please correct form errors.');
}
服务器端代码如下所示:

@RequestMapping(value = "/upload/uploaddraftpcp.action", method = RequestMethod.POST)


public @ResponseBody
Map<String, ? extends Object> uploadDraftpcp(HttpServletRequest request){
    Map<String, Object> modelMap = new HashMap<String, Object>(2);

    try {

        System.out.println("title pcp" + request.getParameter("title"));
        System.out.println("description pcp"
                + request.getParameter("description"));
        //    response.setContentType("text/html");

        modelMap.put("message", "Successfully submitted Form");
        modelMap.put("success", true);
        return modelMap;
    } catch (Exception e) {
        System.out.println(e.toString());
        e.printStackTrace();
        return ExtJSReturn
                .mapError("Error retrieving data.");
    }

}
@RequestMapping(value=“/upload/uploaddraftpcp.action”,method=RequestMethod.POST)
公共@ResponseBody
映射上载DraftPCP(HttpServletRequest请求){
Map modelMap=新的HashMap(2);
试一试{
System.out.println(“title pcp”+request.getParameter(“title”);
System.out.println(“说明pcp”
+获取参数(“说明”);
//response.setContentType(“text/html”);
modelMap.put(“消息”,“已成功提交表单”);
modelMap.put(“成功”,true);
返回模型图;
}捕获(例外e){
System.out.println(例如toString());
e、 printStackTrace();
返回ExtJSReturn
.mapError(“检索数据时出错”);
}
}
,文件上载不是使用普通的“Ajax”技术执行的,也就是说,它们不是使用XMLHttpRequests执行的。而是临时创建一个包含所有字段的隐藏元素,并将其与目标集一起提交,以引用动态生成的隐藏元素,该元素插入到文档中,但在收集返回数据后删除

浏览器解析服务器响应以创建IFRAME的文档。如果服务器使用JSON发送返回对象,则必须将
内容类型
标题设置为
text/html
,以便通知浏览器将未更改的文本插入到文档正文中

当Chrome、FF、IE10和更高版本在响应头中看到
内容类型
=
应用程序/json
时,它们就会这样做。但是,当您对IE8和IE9执行此操作时,当服务器从文件上载中响应时,您会看到一条消息,内容大致如下:“是否要打开或保存此文档”

所以,要在IE8和IE9中解决这个问题,只需将Content Type设置为text/html即可。现代浏览器的响应是一样的,所以你不会因为这个解决方案而破坏任何东西