参考资料:
http://struts.apache.org/release/2.3.x/docs/json-plugin.html
首先引入jar包
struts2-json-plugin-2.x.x.jar
Maven的引入方式:
<dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-json-plugin</artifactId> <version>2.x.x</version> </dependency> </dependencies>
我使用的版本号是 2.3.12
struts2-json-plugin-2.3.12.jar
然后在struts.xml中的package继承json-default:
<package name="default" namespace="/" extends="json-default"> </package>
这样就可以使用
<result type="json"></result>
了
例如:struts.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="json-default"> <action name="json" class="com.tch.test.json.action" method="json"> <!--默认会把所有的具有get方法的变量都放到json结果中--> <result type="json"></result> </action> <action name="json2" class="com.tch.test.json.action" method="json"> <result type="json"> <!--这样就可以只把指定的变量customName放到json结果中--> <param name="root"> customName </param> </result> </action> </package> </struts>
对应的action:
package com.tch.test.json.action;
import java.util.HashMap;
import java.util.Map;
import org.apache.struts2.json.annotations.JSON;
import com.opensymphony.xwork2.ActionSupport;
public class MyAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String field1 = "str";
private int[] ints = {10, 20};
private Map<String,String> map = new HashMap<String,String>();
private String customName = "custom";
//'transient' fields are not serialized
private transient String field2;
//fields without getter method are not serialized
private String field3;
public String json(){
return SUCCESS;
}
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public int[] getInts() {
return ints;
}
public void setInts(int[] ints) {
this.ints = ints;
}
public Map<String,String> getMap() {
return map;
}
public void setMap(Map<String,String> map) {
this.map = map;
}
@JSON(name="newName")//这是为了让json现实的变量名为指定的值newName而不是默认的customName
public String getCustomName() {
return this.customName;
}
}
然后部署访问json:http://localhost:8080/test/json
结果为:{"newName":"custom","field1":"str","ints":[10,20],"map":{}}
然后部署访问json:http://localhost:8080/test/json2
结果为:"custom"
然后在页面中使用ajax测试一下:
首先访问json:
$.getJSON('json.action',function(data){ alert(data.newName); });
结果为:custom
然后访问json2:
$.getJSON('json2.action',function(data){ alert(data[1]); });
结果为 20
完事。
最后附上代码: