看了下网络上的对struts2中如何使用json的资料,依旧感觉都不太好,所以闷头下来自己写一下吧
在ajax中经常使用的json数据的传递,那么在struts2框架中我们要怎么使用json呢?
首先,想要在struts2中使用json,要引入如下的包
(这里是基于struts2基础框架的搭建)
基础框架jar文件如图
使用struts的json功能要求引入的jar包
java类
public class JsonAction extends ActionSupport {
public String getJson(){
//什么都不做,看看是什么??
return "json";
}
}
struts配置文件
<?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>
<package name="test-json" extends="json-default" namespace="/">
<action name="json_*" class="com.xbz.json.action.JsonAction" method="{1}">
<result name="json" type="json" ></result>
<result name="success" >/index.jsp</result>
</action>
</package>
</struts>
运行访问结果为
那么我们应该如何输出我们想要的数据呢????
只要我们在java类中,定义一个成员,并给它get方法,那么struts返回json类型的结果时就会帮我们将所有的成员变量的值作为json数据输出
案例,我在java类中定义了普通类型数据、自定义类、list/map集合(省略Person类定义和get/set),当然json只需要get,可自行测试
public class JsonAction extends ActionSupport {
private String user;//基本类型数据
public Person person;//自定义javaBean
private List list;
private Map map;
public String getJson(){
user="user";
person=new Person("1", "person1");
list=new ArrayList<Person>();
list.add(user);
map=new HashMap<String, Person>();
map.put("personId", person);
return "json";
}
访问结果
{“json”:”json”,”list”:[“user”],”map”:{“personId”:{“id”:”1”,”name”:”person1”}},”person”:{“id”:”1”,”name”:”person1”},”user”:”user”}
这里推荐一个json格式化工具,方便我们观察数据:Hijson
我们在开发中不一定需要将所有的成员都输出去,但是又可能必须设置它的get方法,那么我们如何控制哪些数据输出还是保留呢???
只需要修改一下配置文件,我们可以看出json类似一个Map的key->value
所以我们完全可以将需要输出的数据自行封装在Map集合中,然后在给它设置get方法,交由struts输出
假设成员变量Map jsonReslut中放好了我们需要输出的数据,这时只需要在struts配置文件中如下配置
<package name="test-json" extends="json-default" namespace="/">
<action name="json_*" class="com.xbz.json.action.JsonAction" method="{1}">
<result name="json" type="json" >
<!-- 配置输出指定的类成员数据 -->
<param name="root">jsonResult</param>
</result>
</action>
</package>