struts2如何返回json和处理json

需要的jar包是struts2.1.8,json插件就是2.1.8struts2-json-plugin-2.1.8.1,因为json的第三方插件有很多,例如json-lib-2.4-jdk15json虽然说可以实现json的处理,但是相对来说可能是有点麻烦,而S2自带的插件为简单一点。

 实例:(分页查询和添加)

 

 

 

Struts.xml

<packagename="default"extends="json-default">

<actionname="fieldManage_*"method="{1}"lass="fieldManageAction">

       <resulttype="json">

           <paramname="includeProperties">totalCount,data.*</param>

       </result>

       <resultname="operaFieldmanage"type="json">

           <paramname="includeProperties">success</param>

       </result>

       </action>

</package>

extends=”json-default”这边必须这样设置才能处理json

1.<action name="test" class="com.TestAction" method="test">  

  <result type="json" /><!--actionbean属性以json字符串返回浏览器-->  

  </action>

2.只要继承extends="json-default"json拦截器是默认配置上的,可以不配。result设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做),然后调用jscallback方法.返回json数据

3.如果按照1中的配置。你会发现前台返回的json字符串,是把action中的所有属性全部转化为json字符串返回给浏览器了(甚至有时候返回不了结果,也不报错,后台执行了,但前台执行不到callback function),但是我们有时候需要根据实际情况返回部分结果,如何对json的结果进行定制输出呢?result提供了一些参数替你解决这个问题,一般情况下用的最多的就是includeProperties参数和excludeNullProperties参数。当然还有其他的方法,如给pojo的属性加json注解。

4.includeProperties参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。这个参数直接返回对象的json数据,前台不需要eval转换,<param name="root">result</param>则不同,需要前台进行eval转换

如:输出data对象下面的所有属性总条数。

<resulttype="json">

   <paramname="includeProperties">totalCount,data.*</param>//*表示多值如Map,[]

</result>

5.excludeProperties参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties

6.对一些属性的特殊处理可在action代码中去特殊的序列化,如:

[6.1]默认情况下以get方法开头的都会序列化,如果不想序列化,action中的方法要打上注解
@JSON(serialize=false)

[
6.2]如果在属性get方法上面加@JSON(name="newName"),则返回的json数据中名称是指定的新名称


[
6.3]@JSON(format ="yyyy-MM-dd'T'HH:mm:ss")设置用于格式化输出、解析日期表单域的格式。

[
6.4]@JSON(deserialize=true)设置是否反序列化该属性

注意:为了避免不必要的麻烦,action里面要有有get开头的方法


js获取json值

 //使用JSON对象将服务器响应解析成JSON对象

                    var res = JSON.parse(request.responseText);

                    //遍历JSON对象的每个属性

                    for(var propName in res)

                    {

                        $("show").innerHTML += propName + " --> "

                            + res[propName] + "<br />";

                    }

数组代替数组集合 Map[] users=new Map[100]

,用map代替object Map obj1=new HashMap();

obj1.put("id",val);

obj1.put("name",val);

obj1.put("sex",val);

users[0]=obj1;

users[1]=obj2;...

 

 var users=res["users"];

                    for(var j=0;j<users.length;j++){

alert("id:"+users[j]["id"]+",name:"+users[j]["name"]);

}

 

你可能感兴趣的:(json,struts2)