在用struts2框架时在Action中返回json数据

时间:2022-08-26 19:38:50

    在上一篇搭建了struts2开发环境,之前开发一些小项目都是直接使用的servlet,在servlet中返回json数据很容易:在response对象中打开流直接写入json数据就好了。今天学习struts2时也想在action中返回json数据,但是action中并不能直接像servlet那样返回json数据。在这里记录下今天的收获吧!

    在action中返回json数据有两种方法:

    1.在action中得到response对象,然后就和在servlet中返回json数据是相同的。

    2.struts2对json的扩展,下面主要介绍这种方法.

导入需要的jar包

    要使用struts2对json的扩展,我们需要导入struts2-json-plugin-2.1.8.1.jarxwork-core-2.1.6.jar.使用这两个版本的包完美运行,其他版本可能会有差异导致失败!!!

编写action

    struts2把json看成时map对象(键值对,json本身也就是这样....),所以我们在写action时只要有一个map对象就可以了,struts2会对把这个map对象自动的返回给请求页面(需要特定的配置).例如:

public class TestAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
private Map<String,Object> jsonData;
public String getJsonList(){
jsonData = new HashMap<String,Object>();
jsonData.put("one", "one's apple");
return Action.SUCCESS;
}
public Map<String,Object> getJsonData() {
return jsonData;
}

public void setJsonData(Map<String,Object> jsonData) {
this.jsonData = jsonData;
}

}

配置struts.xml

    返回json数据的action必须extends json-default包,而且result type属性必须为json

<package name="textJson" namespace="/textJson" extends="json-default">
<action name="getJsonList" class="cui.schat.action.TestAction" method="getJsonList">
<result type="json">
<param name="root">jsonData</param> <!-- 这里的jsonData对应action里要返回的map对象 -->
</result>
</action>
</package>