struts,ajax之间的json传递

var json = eval("("+data.result+")");//result在data中					
						alert("array:"+json[0].username);		
						$.each(json,function(index,item){							
							$("#result").append(index+":"+item.username+" "+item.userpassword+"<br/>");
						});

作为一个刚接触json,这几天被json和struts弄得晕头转向的新手,到现在终于有点感悟,终于把测试的demo写了几种方法,终于有点清楚……

也感谢网上各位前辈的贴子代码,所以更要总结一番,给像我一样的后来者一点方便。。

对新手看了一定会有收获的。。有问题大家请指正~


json作为一种被广泛应用的数据交换格式,简单点说就是一串被序列化的字符串。

struts的action和前台的js之间的json传递,主要也就是这个字符串的封装和解析。。


struts把对象(包括List等)序列化为一个字符串,再传给js,js通过var json = eval("("+xxx+")");的方式解析json字符串为js对象,并使用其属性是较常用的一直方式。实现方式有:

一、action中通过根据源对象user新建JSONObject对象obj,再把obj转为string后write到前台:

public String showUser(){
		User  user =  (User) userDAO.findByUsername("king").get(0);
		
		JSONObject obj=new JSONObject(user);
		try {	
			result=array.toString();		//得到序列化对象后的string	可以无setter、getter方法
			HttpServletResponse response = ServletActionContext.getResponse();
			response.setContentType("text/html"); // 火狐浏览器必须加上这句
			response.setCharacterEncoding("UTF-8");
			response.getWriter().write(result);  //直接write到前台,struts.xml的result里什么都不用配
		} catch (Exception e) {
			e.printStackTrace();
		}		
		return Action.NONE;
	
	}
前台:

$(document).ready(function(){
		$("#btn").click(function(){
			$.ajax({
				type: "POST",
				url: "user!showUser",
				dateType: "json",			
				success: function(data,status){
					alert(status);
					alert("data"+data);
					var json = eval("("+data+")");	//此处data即为action里的result,是字符串,要转为js对象				
					alert("json.user.username"+json.user.username);			
						
					}//end of success
			});//end of ajax
		});//end of click
		});//end of ready



二、不用write,直接return json,要配置struts.xml:

public String showUser(){
		List users =  userDAO.findByUsername("king");
		User  user =  (User) userDAO.findByUsername("king").get(0);
		System.out.println("username"+username);
	
		
		try {
			JSONObject obj=new JSONObject();
			obj.put("user", user);
			result=obj.toString();
			} catch (Exception e) {
			
		return "result"; 
	}			//引号勿漏

struts.xml:注意json-default和type=“json"

<package name="userpk" extends="json-default" >
		<action name="user"	class="userAction">
           	 <result type="json" name="result">
		</result>
		</action> 
	</package> 
前台js:

$(document).ready(function(){
		$("#btn").click(function(){
			$.ajax({
				type: "POST",
				url: "user!showUser",
				dateType: "json",
				data: {"username":"wang"},				
				success: function(data,status){
					alert(status);
					alert("data"+data);	
					var json = eval("("+data.result+")");	//result在data中					
					alert("data.username"+json.user.username);
					}//end of success
			});//end of ajax
		});//end of click
		});//end of ready



三、JSONArray处理方法如上,同样是传输json字符串result,传输方法多种,产生字符串代码方法如下:

JSONArray array = new JSONArray();
			array.addAll(users);//users为list
			result=array.toString();


前台js处理稍有不同,success内方法代码如下:

var json = eval("("+data.result+")");					
							
	$.each(json,function(index,item){							
		$("#result").append(index+":"+item.username+" "+item.userpassword+"<br/>");
	});



四、List的处理可以用map方式,如下:

就直接上别人源码了:

public String testByAction() {
		// dataMap中的数据将会被Struts2转换成JSON字符串,所以这里要先清空其中的数据
		dataMap.clear();
		User user = new User();
		user.setId("123");
		user.setName("JSONActionStruts2");
		user.setPassword("123");
		user.setSay("Hello world !");
		dataMap.put("user", user);
		// 放入一个是否操作成功的标识
		dataMap.put("success", true);
		// 返回结果
		return SUCCESS;
	}

struts.xml:

<package name="json" extends="json-default" namespace="/test">
		<action name="testByAction"
			class="cn.ysh.studio.struts2.json.demo.action.UserAction" method="testByAction">
			<result type="json">
				<!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 -->
				<param name="root">dataMap</param>
			</result>
		</action>
</package>


其它众多方法,大家自己研究把。。

参考:http://www.linuxso.com/architecture/15768.html







  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值