原文网址:http://www.verydemo.com/demo_c89_i26079.html
源于使用jquery,form.js进行表单提交时,发现保存到数据库时失败,而页面都已经统一为GBK编码;在网上搜了一些答案大部分都是复制粘贴,并不能解决
文章内容如下:
目前处理一个项目需要使用到jquery的form插件进行jsp页面中的form异步提交,我的java和jsp编码都是GBK的,并且在web.xml中也设置了编码格式为GBK。可是就是这个原因让我碰到了提交表单时出现中文乱码的事情。
解决办法:经测试OK!!!
没有采用form插件(采用form插件解决办法一样直接对data进行二次转码),而是直接使用jquery的$.ajax()函数进行异步请求:
$(document).ready(function(){
$('#submit').click(function(){
var formData = $('#frm1').serialize(); //取表单值 并进行序列化;此时formData已经是乱码了
formData = decodeURIComponent(formData,true);//一次转码
formData = encodeURI(encodeURI(formData)); //两次转码
$.ajax({
type:'post',
data:formData,//form表单数据集
url:'/bshgl/bshczxxcj/admin/writeJbxx.jspx',
success:function(){
alert("保存成功!");
}
});
});
});
后台采用springMVC的annotation进行form表单数据接收
String test= URLDecoder.decode(object.getXxx(), "UTF-8");
..../*下面的代码则是调用hibernate方法将数据保存到database中*/
得到的test字符为中文。并且可以存入编码为GBK的数据库中,木有问题。
而我目前急需解决的问题,后台采用springMVC ,使用@ModelAttribute所接收的form值置于一个对象里面即object中,如果我想将form中的值异步更新到数据库中,那么我就需要对所有的字段进行get和decode。这样做的很麻烦,不知道各位有什么好的办法吗?···
好吧,下面提供我的办法··············但是目前这个办法还不完善:
因为使用的spring来进行bean管理,所以我现在使用的框架中,在entity层和bo层之间还有一个称为dto的一层,他的职责很简单明确,只负责数据传输,每次entity从数据库读取数据,都先将数据copy到dto层,让其去于view打交道,这里就把URLDecoder.decode(object.getXxx(), "UTF-8");置于dto的所有字段的get,set方法中,这样就不需要在Controller层再分别对每个字段进行get并decode了。 不完善的原因是········我在执行bean 拷贝的时候有部分数据没有拷贝进行·····蛋疼