Struts2.2 有自带的 json plugin,但在 2.0.14中好像没有,所以在网上找了些资料整理了一下.
1.struts2.0.14核心包
2.jsonplugin-0.32.jar
http://code.google.com/p/jsonplugin/downloads/list
3.jquery jquery-1.4.2.min.js
下面的demo简单的实现了通过jquery访问action,action返回json格式对象,需要注意的地方:
1.将action的返回类型设置为 json, package 继承 json-default
设置返回类型为json后,struts2的拦截器会自动将返回的数据转换为json对象.
1. JSONAction.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package action;
import com.googlecode.jsonplugin.JSONException;
import com.googlecode.jsonplugin.JSONUtil;
import com.opensymphony.xwork2.ActionSupport;
import entity.Member;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author db2
*/
public class JSONAction extends ActionSupport{
//在执行完action后,应为在struts.xml中配置的 返回 类型为json,所以
// member在经过strust2的拦截器时会被转换为 json格式,在页面上可以直接以Json对象使用
private Member member;
private String result;
private String memberId;
public Member getMember() {
return member;
}
public void setMember(Member member) {
this.member = member;
}
public String getResult() {
return result;
}
public void setResult(String result) {
// System.out.println("set result: " + result);
this.result = result;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
//当用户存在时,反回一个Json 格式的 member, 否则返回 false
public String execute() throws JSONException{
List<Member> members = new ArrayList<Member>();
members.add(new Member(123,123,"member1"));
members.add(new Member(456,456,"member2"));
boolean flag = false;
for(Member m:members){
if(Long.toString(m.getId()).equals(memberId)){
// 1.将m转换成Json格式字符串,的页面上取值是要先把resutl转换为 Josn Object
this.result=JSONUtil.serialize(m);
System.out.println("result member: " + result);
// 2.设置Member为 member,与 this.result=JSONUtil.serialize(m); 的作用一样
setMember(m);
// 1 与 2 的作用都是一样的, 任选一个就可以了
flag = true;
break;
}
}
if(!flag){
result ="false";
}
return SUCCESS;
}
}
2. struts.xml
<!--将返回结果设置成json, package 需要继承 json-default-->
<package name="default2" extends="json-default">
<action name="jsonTest" class="action.JSONAction">
<result type="json"/>
</action>
</package>
3.index.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>index.jsp</title>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#button1").click(function (){
var member_id = $("#member_id").val();
// alert(member_id);
$.ajax({
url: "jsonTest.action",
type:"post",
data:"memberId="+member_id,// 传入JSONAction 的参数
cache:false,
success: function(bd){
//从返回的结果中读取member
if(bd.result != "false"){
alert("MemberId from member: " + bd.member.memberId);
//直接打印result 结果为 json格式的字符串
alert("result: " + bd.result);
var obj=eval("("+bd.result+")");
alert("Member from result: memberId:" +obj.memberId+" memberName: "+obj.memberName);
}else{
alert("member 不存在");
}
}
});
});
});
</script>
</head>
<body>
输入MemberId查询: <input type="text" id="member_id" value="123"/>
<input type="button" id="button1" value="提交"/>
</body>
</html>