jQuery.form.js进行表单提交,中文乱码问题及解决

目前处理一个项目需要使用到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 拷贝的时候有部分数据没有拷贝进行·····蛋疼

你可能感兴趣的:(java,jquery,Ajax)