在web开发中经常会使用到json对象,比如从action返回给页面一个json对象。
可以做如下处理:
一、使用插件
1、加入jsonplugin-0.34.jar
2、在struts.xml中做如下配置
<package name="sysMenu" namespace="/" extends="json-default">
<action name="sysMenu_*" method="{1}"
class="cn.framework.system.menu.SysMenuAction">
<result name="save">/sysMenu/search.jsp</result>
<result name="init">/sysMenu/menu_manage.jsp</result>
<result name="testJson" type="json"></result>
</action>
</package>
extends="struts-default" 改成 extends="default-default" 并加上 type="json"
3、做了如下配置后,Struts2 Action中只要提供了getter方法的都会被转成json对象
4、如果不想转成json对象——那么这样
@JSON(serialize=false)
public SysMenu getSysMenu() {
return sysMenu;
}
5、页面调用
<script type="text/javascript">
$(document).ready(function() {
$.getJSON("gen_struts2/sysMenu_testJson.action",
{ts:new Date().getTime()},
function(data){
alert(data["sysMenu"]["menuName"]);
});
});
</script>
二、手工输出
1、加入gson-1.4.jar
2、Action
在方法里:加上
Gson gson = new Gson();
String result = gson.toJson(list);//list为要转换为JSON对象的数据
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/json; charset=utf-8");
response.setHeader("Cache-Control", "no-cache"); //取消浏览器缓存
PrintWriter out = response.getWriter();
out.print(result);
out.flush();
out.close();
return null;
可以做成工具类JSONUtils.java
public class JSONUtils {
public static void toJson(HttpServletResponse response, Object data)
throws IOException {
Gson gson = new Gson();
String result = gson.toJson(data);
response.setContentType("text/json; charset=utf-8");
response.setHeader("Cache-Control", "no-cache"); //取消浏览器缓存
PrintWriter out = response.getWriter();
out.print(result);
out.flush();
out.close();
}
}
这时在struts.xml里就不用 加上 type="json"了
<action name="getGsonAction"class="com.test.action.json.GetGsonAction"></action>