zoukankan      html  css  js  c++  java
  • Java 前台后台数据传递、中文乱码解决方法

    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 block
    10             e.printStackTrace();
    11         }finally{
    12         out.flush();
    13         out.close(); 
    14     }    
    15   return null;  //最后返回null
    16 } 

    1.1.2 struts 配置文件:

    1 <action name="testAction" class="testAction" method="getResult">
    2     <result name="success"></result> <!-- 这里不用填写什么 -->
    3   </action>    

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

     1     List<Student> lsStudent; //lsStudent 属性要有getset方法
     2     /**
     3     * 根据班级ID 获得该班级的学生信息
     4     * return 班级所有学生信息
     5     */
     6    public String getStudentByClassId(){
     7      
     8      HttpRequest request=ServletActionContext.getRequest();
     9      String classId=request.getParameter("classId"); //班级ID
    10      
    11      /*
    12      *这里的判断很容易出错,如果你用(id!=null)做判断条件,当没有获得值时,id 是一个空的String对象,空对象不能做判断,这就好像你在Java类中这样写代码:  String tb;
    13       if(tb==null||tb==""){// 错误:The local variable tb may not have been initialized
    14           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   <action name="testAction" class="testAction" method="getResult">
    2          <result name="success" type="strongtype-json">
    3          <param name="root">
    4          lsStudent <!-- 这里返回action 中要返回的对象(一定要有get/set方法) -->
    5          </param>
    6          </result>
    7       </action>

    最终前台会得到这样的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: studentRuselt
    11            }
    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:true
    8 
    9 });
  • 相关阅读:
    ubuntu12.04 死机 卡屏 画面冻结解决方案
    Install Firefox 20 in Ubuntu 13.04, Ubuntu 12.10, Ubuntu 12.04, Linux Mint 14 and Linux Mint 13 by PPA
    ListView1.SelectedItems.Clear()
    android studio 下载地址
    jquery.slider.js jquery幻灯片测试
    jquery.hovermenu.js
    jquery.tab.js选项卡效果
    适配 placeholder,jquery版
    jquery.autoscroll.js jquery自动滚动效果
    将 Google Earth 地图集成到自己的窗体上的 简单控件
  • 原文地址:https://www.cnblogs.com/lanston/p/3803579.html
Copyright © 2011-2022 走看看