Structs2+Spring或SpringMVC+JQuery+JSon 实现Json数据返回的若干研究结论

2 篇文章 0 订阅
1 篇文章 0 订阅

 

结论一:

<action name="" class="">
	<result name="" type="json">
	</result>
</action>

如果在struts.xml中有以上代码,那么Action中的东西将无法再用Struts2的标签取到,利用<s:debug></s:debug>你可以观察到此时Value Stack Contents和Stack Context根本不存在Action中的属性、方法等东西。

 

结论二:

关于<result type="json">下<paramt></param>标签的参数配置问题。

<result type="json">
    <!-- root参数只会返回根层对象,以前我总是自己将Action中要返回前台的数据(如List)封装在jsonResult,然后配置root,可这样防线无法取到Acion中的其它东西,所以现在用结论三和四里的方法了-->
    <param name="root">jsonResult</param>
    <!-- 指定是否序列化空的属性 -->
    <param name="excludeNullProperties">true</param>
    <!-- 这里指定将序列化dataMap中的那些属性 -->
    <param name="includeProperties">
         userList.*
    </param>
    <!-- 这里指定将要从dataMap中排除那些属性,这些排除的属性将不被序列化 -->
    <param name="excludeProperties">
         SUCCESS
    </param>
</result>


 

 

结论三-配置实例:

Action部分代码

	private String name;
	private List<Dept> deptList;  
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<Dept> getDeptList() {
		return deptList;
	}
	public void setDeptList(List<Dept> deptList) {
		this.deptList = deptList;
	}
	    


 

struts.xml部分代码

<package name="s2sh_json" extends="json-default" namespace="/departmentJSon">
	<action name="deptJSon" class="deptJSon">
		<result name="deptListWithJSon" type="json">
			<param name="includeProperties">name,deptList.*</param>
		</result>
	</action>
</package>

注意:extends必须是json-default;

includeProperties中Action想要以json数据格式返回的属性除了String等基本类型外,其它都必须加.*(如此处的deptList.*,当然如果有valueBean也要这样);

项目中必须加入struts2-json-plugin.jar和commons-lang.jar这两个jar包。

 

Jsp中JQery部分代码

$.ajax({cache:false,
	type:"post",
	dataTyp:"json",
	url:"<%=basePath%>departmentJSon/deptJSon!getAllDeptByAjax.action",
	success:function(data) {
		alert(data.name);				
		$.each(data.deptList, function(i, one) {
			result = "<tr align='center'><td>"+one.dno+"</td><td>"+one.dname+"</td><td>"+one.dloc+"</td></tr>";
			$(result).appendTo("#deptListDiv");
		});
	}	
});




 

结论四-另一个配置实例:

如果不喜欢在struts.xml中配置<param name="includeProperties">name,deptList.*</param>,那么可以采用在Action写annotation,可以达到相同的效果。

struts.xml的配置如结论三中的,但是去掉<param name="includeProperties">name,deptList.*</param>。

而Action部分代码如下,关于@JSON中参数设置可以自己百度,常用的也就serialize。

          private String name;
	private List<Dept> deptList;  
	@JSON(serialize=true)
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
        @JSON(serialize=true)
	public List<Dept> getDeptList() {
		return deptList;
	}
	public void setDeptList(List<Dept> deptList) {
		this.deptList = deptList;
	}


 

结论五-SpringMVC中的配置实例:
 在springmvc中由于@ResponseBody返回的是可序列化的对象,因此只要将结果利用一些工具类事先转换为json对象,那么就能够返回给前端。

 

@RequestMapping(value = "/closingDetailView")
	@ResponseBody
	public JSONArray closingDetailView(@RequestParam(value = "closingId", required = true) String closingId)
	{
		List<ClosingDetail> detailList = closingDetailService.queryClosingDetailForListByClosingId(closingId);
		JSONArray jsonArray = JSONArray.fromObject(detailList);
		return jsonArray;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值