struts配置中resulttype=jsonreult是什么意思.
在Struts2中,type="json“这样是⽤来做AJAX请求的
所以根本就没有跳转页⾯。
json是⼀种数据格式,具体可以⽹上去学习⼀下。
在Struts2中,如果这样写,会将你Action中的变量转成JSON 返回到页⾯
⽤来做AJAX是⾮常⽅便的。
只要继承extends="json-default",result type设置成json之后,容器会把action的属性⾃动封装到⼀个json对象中(json拦截器来做)
1, ignoreHierarchy 参数:默⽰是否忽视等级,也就是持续关系,⽐如:TestAction 持续于 BaAction,那么 TestAction 中返回的 json 字符串默认是不会包含⽗类 BaAction 的属性值,ignoreHierarchy 值默认为 true,设置为 fal 后会将⽗类和⼦类的属性⼀路返回。
<result type=”json”>
<paramname=”ignoreHierarchy”>fal</param>
</result>
2, excludeNullProperties 参数:默⽰是否去掉空值,默认值是 fal,若是设置为 true 会主动将为空的值过滤,只输出不为空的值。
<result ype=”json”>
<paramname=”excludeNullProperties”>true</param>
</result>
3, root 参数:从返回成果中按照 ognl 表达式取出你须要输出的成果。只输出 person 对象的 name 属性值,设备如下:
<result type=”json”>
印度留学
<param name=”root”>person.name</param>
</result>反体
4, includeProperties 参数:输出成果中须要包含的属性值,这⾥正则表达式和属性名匹配,可以⽤ “,” 分别填充多个正则表达式。
丧尸片电视剧<result type=”json”>
<param name=”includeProperties”>person.*, person.name</param>
</result>
错失爱情5, excludeProperties 参数:输出成果须要剔除的属性值,也⽀撑正则表达式匹配属性名,可以⽤ “,” 分别填充多个正则表达式,类同includeProperties 参数。
JSON插件提供了⼀种名为json的ResultType,⼀旦为某个Action指定了⼀个类型为json的Result,则该Result⽆需映射到任何视图资源。因为JSON插件会负责将Action⾥的状态信息序列化成JSON格式的数据,并将该数据返回给客户端页⾯的JavaScript.
简单地说,JSON插件允许我们在JavaScript中异步调⽤Action,⽽且Action不再需要使⽤视图资源来显⽰该Action⾥的状态信息,⽽是由JSON插件负责将Action⾥的状态信息返回给调⽤页⾯——通过这种⽅式,就可以完成Ajax交互。
Struts2提供了⼀种可插拔⽅式来管理插件,安装Struts2的JSON插件与安装普通插件并没有太⼤的区别,⼀样只需要将Struts2插件的JAR⽂件复制到Web应⽤的WEB-INF/lib路径下即可。
安装JSON插件按如下步骤进⾏:
(2)将下载到的jsonplugin-0.7.jar⽂件复制到Web应⽤的WEB-INF路径下,即可完成JSON插件的安装。
实现Actio逻辑
假设wo,en输⼊页⾯中包含了三个表单域,这三个表单域对于三个请求参数,因此应该使⽤Action来封装这三个请求参数。三个表单域的name分别为field1、field2和field3.
处理该请求的Action类代码如下:
publicclassJSONExample {
//封装请求参数的三个属性
卡卡西图片private String field1;
private transientStringfield2;
privateStringfield3;
//封装处理结果的属性
privateint[]ints={10,20};
八卦连环掌
privateMapmap=newHashMap(); privateStringcustomName="custom";
板桥小学
//三个请求参数对应的tter和getter⽅法publicStringgetField1() {
return field1;
}
publicvoidtField1(Stringfield1) {
this.field1=field1;
}
/
/此处省略了field1和field2两个字段的tter和getter⽅法 ... //封装处理结果的属性的tter和getter⽅法
publicint[]getInts() {
returnints;
}
publicvoidtInts(int[]ints) {
this.ints=ints;
}
publicMapgetMap() {
returnmap;
}
publicvoidtMap(Mapmap) {
this.map=map;
} //使⽤注释语法来改变该属性序列化后的属性名 @JSON(name="newName") publicStringgetCustomName() {
returnthis.customName;
}
publicStringexecute() {
map.put("name","yeeku");
returnAction.SUCCESS;
}
}
在上⾯代码中,使⽤了JSON注释,注释时指定了name域,name域指定Action属性被序列化成JSON对象的属性名。除此之外,JSON 注释还⽀持如下⼏个域:
rialize:设置是否序列化该属性
derialize:设置是否反序列化该属性。
format:设置⽤于格式化输出、解析⽇期表单域的格式。例如"yyyy-MM-dd‘T‘HH:mm:ss".
配置该Action与配置普通Action存在⼩⼩的区别,应该为该Action配置类型为json的Result.⽽这个Result⽆需配置任何视图资源。
配置该Action的l⽂件代码如下:
<?xmlversion="1.0"encoding="GBK"?><!DOCTYPEstrutsPUBLIC "-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
"struts.apache/dtds/struts-2.0.dtd">
<struts>
<constantname="ding"value="UTF-8"/>
48式太极拳背向演练带口令<packagename="example"extends="json-default">
<actionname="JSONExample""lee.JSONExample">
<resulttype="json"/>
</action>
</package>
</struts>
在上⾯配置⽂件中有两个值得注意的地⽅:
第⼀个地⽅是配置ding常量时,不再是使⽤GBK编码,⽽是UTF-8编码,这是因为Ajax的POST请求都是以UTF-8的⽅式进⾏编码的。
第⼆个地⽅是配置包时,⾃⼰的包继承了json-default包,⽽不再继承默认的default包,这是因为只有在该包下才有json类型的Result.