标签中)
更新时间:2021-11-16 01:34:47
After 2 hours hard work ,I have solved the problem in the demo of permanent progress bar.
事实上,Ext-js的框架的BUG依然存在,这个BUG就是,当你用Spring框架的jackson生成一个json对象的时候,而你客户端Ext-js上传一个文件到服务器端的时候,服务器端的返回json对象里面,会使用application/json的MIME类型,然后返回到客户端就会自动加上<pre></pre>标签,这个问题是框架本身的,没办法解决:
http://***.com/questions/7023531/extjs-4-spring-3-file-upload-server-sends-bad-response-content-type
http://topic.csdn.net/u/20110830/15/2002bebf-2472-4d41-9a12-1b239fce2a9b.html
http://blog.nroed.com/2011/11/21/iframe-post-file/
我的解决思路,就是巧妙的绕过Extjs的框架,这次,我不再让服务器端的json对象存于@ResponseBody中,而是让服务器端编码方式改为text/html,同时,我在通用类中构建一个将对象转为JSONObject的方法:
与此同时,我在Controller里面的调用封装的ExtJsonResponse的getJSONFormat()方法,让他们按照我们的意图在服务器端,按照我们自定义的方式,而不是Spring jackson框架的方式就转为了json对象,最后吧json对象打印到HttpServletResponse输出流中,这种情况下,我们打印出去的其实是json对象的toString()形式,而不再是json对象,因此不会被自动加上<pre>标签对。
然后我们Extjs客户端,就无需要decode了, 因为我们发过来的是json String,而不是json对象,所以不要decode,直接从中提取信息,然后就解决了。
此方法得益于突然的灵感,这里记录下,以免以后忘记。^_^
本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/834237,如需转载请自行联系原作者