`
2277259257
  • 浏览: 499137 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Struts框架下页面、Action通过JSON数据交换

 
阅读更多

接收页面通过ajax提交的json格式的数据,做处理思路

1.将页面取到的数据转换成json格式数据

2.json数据转成json字符串对象

3.action有对应属性(json字符串+字符串反序列化后)接收页面传过来的参数。Ajax提交的json字符串当成String接收

4.接收了json字符串,把json字符串解析获取信息或放序列化成java对象

5.获取json信息dosomething

 

1.action中将java对象转换成json字符串

2.struts.xml中定义返回类型为json

3.页面接收json字符串

4.将json字符串转换成java对象

  JS<------->JSON<------->JAVA

 

页面JSON转换API:(json.js)
 JSON.parse(strJSON)-是用来转化JSON字符串为JavaScript对象的、
JSON.stringify(objJSON) –用来转化JavaScript对象为一个JSON对象的。

java代码中JSON转换API:(JSON-lib包:用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean;org.apache.commons(3.2以上版本) ;org.apache.oro ;net.sf.ezmorph(ezmorph-1.0.4.jar)  )

JSONObject.fromObject(q2); -将java对象转换成JSON对象

JSONArray  json = JSONArray.fromObject(list);  -将java对象集合转换成JSON数组对象

 

JSONObject.fromString(json); -将JSON字符串转换成

 

页面

页面发送数据

  一.将收集页面数据组装成js对象(因为JSON对象和JS对象的数据格式一样)

            var name= $("#name").attr("value");

            var pwd = $("#password").attr("value");

            var User =  {"name":name,"password":pwd};

 

  二.JS对象转变成JSON字符串对象

            var strUser = JSON.stringify(User);

 

  三.发送JSON字符串 对象     

          方法1:Ajax发送、接收JSON对象数据

           function loadAuotCityList() {

                $.ajax({

                           type: "POST", //post请求
                           url: "index.action", //
请求actionURL

                           dataType:"json",//返回类型
                           success: function(result){ //
回调函数

                                      if(result.success) {

                                               apdata = eval(result.data);
                                                 } else {

                                              alert("ERROR:" + result.data);
                                                 }

                }
                 });

           }

         方法2:Jquery发送、接收JSON对象数据

             $.post('<c:url value="/index.action"></c:url>',

                        {json: strUser},

                        function(data){

                             alert(data);

                        }

             );

        方法3:

            $.post("showQuestions?type="+type,null,callbackShowQuestions,"json");

            这时在回调函数的参数data获得的就是json转换后的js对象数组,以下标方式便可访问数组里的相应对象信息。

 

 页面获取数据

       方法一:使用Jquery  框架获取json数据

         1. 获取JSON对象数据

            var json_data = $.getJSON("xxx.action",function(data){

                                               for(var i = 0;i < data.length;i++){
                                                     var id = data[i].id;

                                                     var name =data[i].name;

                                   }
                                      });

2.将JSON对象转换成JS对象

var data = $.parseJSON(json_data);

 

方法二:使用json数据转换工具

      Var    employees=responseText.parseJSON();   //JSON字符串解析成对象

      For(var  i=0;  I  < employees.length;  i++){

           Var  name=employees[i].name;

      }

 

 

action处理

public class JsonSubmitAction {

  一:Action接收json数据

    private String json;      //该属性接收页面提交过来名称叫jsonjson字符串对象

    private boolean ok;     //自定义的属性(页面验证时,可将此属性返回给页面做判断)

    public String getJson() {

        return json;

    }

    public void setJson(String json) {

        this.json = json;

    }

    public boolean isOk() {

       return ok;

    } 

    public void setOk(boolean ok) {

      this.ok = ok;

    }

    public void execute() throws Exception {

        方法一:使用json数据转换工具

      //json 反序列化,User属性对应json数据参数

         User user = JSON.parseObject(json, User.class);   

        System.out.println("username:" + user.getName() + " pwd:" + user.getPassword());

       方法二:

     User stu = (User) JSONObject.toBean(json, User.class);

     //获取json信息dosomething

        if (user.getPassword().equals("123456")) {

            ok = true;//可以使用

        } else {

            ok = false;//不可使用

        }

     

    二:Action输出json数据     (action中数据直接拼写成一个json数据的string.....返回即可

   方法一:将数据通过字符串拼接转换成JSON格式的字符串,返回

        将list遍历然后拼接:

 

            DAO dao = new DAO();
            List list= dao.findAll();
            StringBuffer sb=new StringBuffer();
            sb.append("[");
            for(Object obj:list){
                 User  user=(User) obj;
                 sb.append("{").append("title").append(":'").append(dto.getTitle()).append("',")

                     .append("chr_id").append(":").append(dto.getChr_id()).append(",")
                     .append("images").append(":'").append(dto.getImage()).append("'},");
            }
            sb.deleteCharAt(sb.length()-1);
            sb.append("]");

            Return sb;

   

    方法二:使用JSON数据转换工具(java对象转换成json字符串输出)

 

           调用JSONObject.fromObject方法转换(要下2个包。。)
           List list = new ArrayList();
           Map map = new HashMap();
           map.put("id",100);
           map.put("name",100);
           list.add(map);
           out.print(JSONObject.fromObject(list).toString());
                 

      JSONObject jsonStu = JSONObject.fromObject(student);

      System.out.println(jsonStu.toString());

 

          return "success";

    }

}

 

Struts.xml:

再在struts2的配置文件配置一个返回json数据的类型.

<action name="index" class=" action.user.IndexAction">

     <result name="success" type="json">

         <param name="root">ok </param>

     </result>

 </action>

其中<result>中一定要将type规定为json,同时加入<param>组件,规定传递的为ok属性,

没有加入<param>在部署该应用时会报警告no default parameter defined for result of type json(没有为json响应类型定义默认的参数)此时客户端接收到的就不仅仅是ok属性而是所有action中的属性,在客户端alert返回的数据会显示object,但是加入<param name=”root”>ok</param>返回的数据中就只有ok,alert时显示的内容就是true或者false,这里需要注意的是<param name=”root”>ok</param>中name=”root”是固定的写法。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics