本文转自: http://www.blogjava.net/fuhoujun/archive/2008/10/04/232324.html
Apache提供的一个插件包,可以把
Action中的数据以
JSON做个封装然后返回。
它会将整个
action中的变量转化为
JSON数据
(根对象在
JSON中数据添加一个
”root”标识
)。如果要使用它,
Action必须遵循以下几点:
-
返回的页面类型中
”content-type”必须是
”application/json”.(这个已经
Internet Community采用
).
-
JSON内容必须是符合格式要求的
.
-
Action中
field必须有
public的
set方法
.(是不是没有
set方法就不会将
field添加到
JSON数据中,有待验证
).
-
它支持的类型有
: 基本类型
(int,long...String), Date, List, Map, Primitive Arrays, 其它
class, 对象数组
.
-
在
JSON中任何的
Object会被封装在
list或
map中,数据会被封装程
Long,如果是含有的数据则会被封装程
Double,数组会被封装程
List.
下面给出
JSON的数据格式:
{
"doubleValue": 10.10,
"nestedBean": { "name": "Mr Bean" },
"list": ["A", 10, 20.20, { "firstName": "El Zorro" }],
"array": [10, 20]
}
这个插件支持以下几个注释
:
注释名
|
简介
|
默认值
|
序列化
|
反序列化
|
name
|
配置
JSON
中
name
|
empty
|
yes
|
no
|
serialize
|
在
serialization
中
|
true
|
yes
|
no
|
deserialize
|
在
deserialization
中
|
true
|
no
|
yes
|
format
|
格式化
Date
字段
|
"yyyy-MM-dd'T'HH:mm:ss"
|
yes
|
yes
|
可以通过配置来显示指出要放在
JSON中
field,其中有个自己的验证规则需要研究
.
<!-- Result fragment -->
<result type="json">
<param name="excludeProperties">
login.password,
studentList.*".sin
</param>
</result>
<!-- Interceptor fragment -->
<interceptor-ref name="json">
<param name="enableSMD">true</param>
<param name="excludeProperties">
login.password,
studentList.*".sin
</param>
</interceptor-ref>
根对象
<result type="json">
<param name="root">
person.job
</param>
</result>
也可以使用拦截器配置操作父对象
<interceptor-ref name="json">
<param name="root">bean1.bean2</param>
</interceptor-ref>
将
JSON数据用注释封装
如果
wrapWithComments
设置为
true(
默认值为
false)
,则生成的
JSON
数据会变成这样
/* {
"doubleVal": 10.10,
"nestedBean": { "name": "Mr Bean" },
"list": ["A", 10, 20.20, { "firstName": "El Zorro" }],
"array": [10, 20]
} */
这样做可以避免
js中一些潜在的风险,使用时需要
:Var responseObject = eval("("+data.substring(data.indexOf(""/"*")+2, data.lastIndexOf(""*"/"))+")");
父类
“root”对象中父类的
field不会(会?)
默认存放到
JSON数据中,如果不想这样做,需要在配置时指定
ignoreHierarchy
为
false:
<result type="json">
<param name="ignoreHierarchy">false</param>
</result>
枚举类型
默认处理枚举类型时,会被处理成
JSON数据中
name等于枚举中
value而
value等于枚举中
name.
public enum AnEnum {
ValueA,
ValueB
}
JSON: "myEnum":"ValueA"
如果在处理枚举类型时,在
xml中配置了
enumAsBean,则会被当作一个
Bean处理,在
JSON数据中会有一个特别的属性
”_name”值为
name().这个枚举中的所有属性都会被处理
.
public enum AnEnum {
ValueA("A"),
ValueB("B");
private String val;
public AnEnum(val) {
this.val = val;
}
public getVal() {
return val;
}
}
JSON: myEnum: { "_name": "ValueA", "val": "A" }
Xml中配置
:
<result type="json">
<param name="enumAsBean">true</param>
</result>
分享到:
相关推荐
Struts2_Jsonplugin_详解.doc
是struts的一个插件包
为了方便ajax调用传输数据,在struts2中加入的json插件用来做对象的序列化和反序列化,json插件的下载地址 http://code.google.com/p/jsonplugin/ 1. 下载json插件包,将jar包拷贝到WEB-INF/lib目录 注:struts2...
json2+jsonplugin struts2整合ajax时,使用json时需要的jar包。。。。。。。。。。。。
包括struts2的jar包,共33个非常全的,实用的。还有jsonplugin-0.33.jar包
struts2-core-2.xx 升级为struts2-core-2.3.15.1.jar后 jsonplugin-0.32.jar需要升级为 struts2-core-2.3.15.1.jar,不然在使用ajax时候报错 java.lang.NullPointerException at org.apache.jsp.web.error_jsp._jsp...
jsonplugin-0.32(struts2.0.0).jar jsonplugin-0.34(strurs2.1.6).jar
1、json.js 2、jsonplugin-0.34.jar 3、struts2-json-plugin-2.1.8.1.jar
第一次上传,要5分,是物有所值,处理了jsonplugin 的no session的问题,并且添加了,新的注释,例如 @JSON(exclude='对象的名称') 就可以剔除 解决json与Hibernate之间的大部分问题 1.数据只取三层 2.对one-ton-many ,...
NULL 博文链接:https://shengren-wang.iteye.com/blog/1325210
jsonplugin源码包,struts2 ajax jsonplugin源码,源码学习
jxl.jar;dom4j.jar;jsonplugin-0.34.jar;junit-3.8.2.jar;log4j-1.2.14.jar;struts2-codebehind-plugin-2.0
该压缩包内包含三个jar文件,其功能和jsonplugin.jar文件相同,用于和struts2.1.8整合,转换json数据格式供extjs使用
struts2 + jsonplugin google自动提示 ajax示例
jsonplugin0.33的代码,能够与struts2使用的
jsonplugin-0.32.jar jsonplugin.jar包
1、将struts2的json插件加入web工程的lib,jsonplugin的下载地址:http://code.google.com/p/jsonplugin/downloads/list
java structs jsonplugin
包含各种json资源包,json jsonplugin-0.33 struts2-json-plugin-2.1.8.1 struts2-json-plugin-2.1.6