博客
关于我
Java 前台后台数据传递、中文乱码解决方法
阅读量:427 次
发布时间:2019-03-06

本文共 3631 字,大约阅读时间需要 12 分钟。

1.向前台传递数据;

2.向后台传递数据;
3.ajax post 提交数据到服务端时中文乱码解决方法;
4.数组类型参数传递;

1.向前台传递数据:
1.1 字符串数据传递:
  这种方式只是单一的向前台传递字符串(比如传递ajax 请求某个数据的结果),通过 response 实现;
 1.1.1 Action 类:

1 public String getResult(){ 2   HttpServletResponse response=ServletActionContext.getResponse(); 3   response.setContentType("text/html;charset=GBK");//解决中文乱码 4     PrintStream out=null; //流 5    try { 6             out = new PrintStream(response.getOutputStream()); 7              out.print("向前台传递一个字符串结果"); 8         } catch (IOException e) { 9             // TODO Auto-generated catch block10             e.printStackTrace();11         }finally{12         out.flush();13         out.close(); 14     }    15   return null;  //最后返回null16 }

1.1.2 struts 配置文件:

1 
2
3

1.2 对象数据传输:

  对象数据通常是已json 格式传输,在 struts2 配置文件内引入 json-default(普通json 格式) 包或者 jackson-json-default(加强型json格式,在返回的json数据中包含对象类型,类似这样的结果("_javaType_":"com.action.TestAction");可以根据业务情况选用,随着业务系统的庞大,我一般用javascript 在前台绑定数据,这样当涉及到判断数据类型时就可以采用这个字段的值来处理:
1.2.1 Action 类:

1     List
lsStudent; //lsStudent 属性要有get\set方法 2 /** 3 * 根据班级ID 获得该班级的学生信息 4 * return 班级所有学生信息 5 */ 6 public String getStudentByClassId(){ 7 8 HttpRequest request=ServletActionContext.getRequest(); 9 String classId=request.getParameter("classId"); //班级ID10 11 /*12 *这里的判断很容易出错,如果你用(id!=null)做判断条件,当没有获得值时,id 是一个空的String对象,空对象不能做判断,这就好像你在Java类中这样写代码: String tb;13 if(tb==null||tb==""){// 错误:The local variable tb may not have been initialized14 System.out.println(tb);15 } 16 */17 if(null!=id ||!"".equals(id)){18 lsStudent=TestStudent.getStudentById(id);19 }20 21 return SUCCESS;22 }

1.2.1 struts 配置文件:   

1   
2
3
4 lsStudent
5 6
7

最终前台会得到这样的json数据:

1 [{"__javaType__":"com.base.Student","name":"张三","age":"10","homeAddr":null,"stuNum":0,"classNum":0},{"__javaType__":"com.base.Student","name":"李四","age":"20","homeAddr":null,"stuNum":0,"classNum":0}]

1.2.3 前台js获得json数据:

1    $.ajax({ 2      type:"post", 3      url:"testAction.action", 4      data:{ 5      classId:classId 6      }, 7      success:function(rs){ 8         var studentArray=[]; //前台创建个数组对象保存数据 9        $.each(rs,function(i,item){10           var student;11           student.name=item.name;12           student.id=item.id;13           student.age=item.age;14           studentArray.push(student); //将student 对象信息保存到数组对象中15        });16      },17      error:function(){18      alert("获取数据时发生错误");19      }20    });

3.ajax post 提交数据到服务端时中文乱码解决方法:

  get 方式提交数据到服务端不会乱码,但对数据量有限制;post 可以提交大数据量,但中文会发生乱码,解决方法:
在JS上用使用 encodeURIComponent 对字符编码处理:

1  studentRuselt=encodeURIComponent(JSON.stringify(result),"utf-8"); //这里用了json2 来将对象转换为json格式,然后在用encodeURIComponent来设置编码; 2  3  $.ajax({ 4            type:"post", 5            url:"saveExamQuestionAnswer.action", 6         cache:true, 7         async:true, //这里指定值时不能加双引号(会设置无效) 8            contentType: "application/x-www-form-urlencoded; charset=utf-8",  9            data: {10                studentRuselt: studentRuselt11            }12      )};

Action类上用java.net.URLDecoder.URLDecoder.decode方法转码:

studentRuselt=URLDecoder.decode(studentRuselt,"UTF-8");

这样得到的中文不会乱码,还有另外一个js组件:encodeURI也可以对字符进行处理,提交时它会使用jquery默认编码提交数据,但使用encodeURIComponent 组件指定编码,细节清晰,前台后台处理编码一致这样比较稳妥;   

4.数组类型参数传递:
 若一个请求中包含多个值,如:(test.action?tid=1&tid=2&tid=3),参数都是同一个,只是指定多个值,这样请求时后台会发生解析错误,应先使用 tradititonal 格式化:  

1 $.ajax({2   type:"post",3   url:"test.action",4   data:{5    tid:[1,2,3]6    },7   traditional:true8 9 });

 

转载地址:http://oncyz.baihongyu.com/

你可能感兴趣的文章
使用js打印时去除页眉页脚
查看>>
Spring security OAuth2.0认证授权学习第二天(基础概念-RBAC)
查看>>
ORA-00904: "FILED_TYPE": 标识符无效
查看>>
移动互联网恶意软件命名及分类
查看>>
PySide图形界面开发(一)
查看>>
882. Reachable Nodes In Subdivided Graph
查看>>
375. Guess Number Higher or Lower II
查看>>
764. Largest Plus Sign
查看>>
等和的分隔子集(DP)
查看>>
L - Large Division (大数, 同余)
查看>>
41. First Missing Positive
查看>>
80. Remove Duplicates from Sorted Array II
查看>>
83. Remove Duplicates from Sorted List
查看>>
410. Split Array Largest Sum
查看>>
程序员视角:鹿晗公布恋情是如何把微博搞炸的?
查看>>
系统编程-进程间通信-无名管道
查看>>
一个支持高网络吞吐量、基于机器性能评分的TCP负载均衡器gobalan
查看>>
404 Note Found 团队会议纪要
查看>>
使用Redis作为Spring Security OAuth2的token存储
查看>>
【SOLVED】Linux使用sudo到出现输入密码提示延迟时间长
查看>>