1.导入jar包,json-lib.jar,jsonplugin.jar
2.下载Jquery.js和jquery.json-2.2.j
3.定义Action类
package com.test.action;
import java.util.ArrayList;
import java.util.List;
import com.struts2.bean.*;
import net.sf.json.JSONObject;
/**
* 关于jsonplugin序列化的几点:
a.对于不想被序列化的属性,可以在他的get方法前加注释: @JSON(serialize=false)
b.对于想改变json结果属性名称的,可以在他的get方法前加注释@JSON(name="属性名")
c. 带有transient修饰符与没有Getter方法的字段(field)都不会被串行化为JSON。
* @author Administrator
*
*/
public class AjaxAction {
private String requestParamName;
private User user;
List<User> list=null;
private String message;
private String jsonResult;
public String getJsonResult() {
return jsonResult;
}
public void setJsonResult(String jsonResult) {
this.jsonResult = jsonResult;
}
public String WW(){
//user=new User();
list=new ArrayList<User>();
User user1=new User();
user1.setUsername("张三");
user1.setAge(23);
User user2=new User();
user2.setUsername("李四");
user2.setAge(25);
list.add(user1);
list.add(user2);
this.message = "成功返回单个值";
this.jsonResult="另一个值";
return "message";
}
public String LoadList()
{
System.out.println("从Ajax传进来的值:"+requestParamName);
if(user!=null)
{
System.out.println("userName:"+user.getUsername());
}
return "getObj";
}
public String getRequestParamName() {
return requestParamName;
}
public void setRequestParamName(String requestParamName) {
this.requestParamName = requestParamName;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
}
4.定义Strutrs.xml
<package name="AjaxAction" namespace="/" extends="json-default">
<action name="ajaxAc" class="com.test.action.AjaxAction">
<!-- 指定json拦截器(默认没有),此拦截器用来将url参数转化为java对象,但此时
在js中要指定contentType: "application/json" -->
<interceptor-ref name="json"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="message" type="json">
</result>
<result name="getObj" type="json">
<!-- 指定不需要被返回的属性,默认返回带get方法的所有属性 -->
<param name="excludeProperties">
list
</param>
<!-- 指定需要被返回的属性,默认返回带get方法的所有属性 -->
<param name="includeProperties">
</param>
</result>
</action>
</package>
5.定义jsp文件(需要导入2个js文件)
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.json-2.2.js"></script>
<input type="button" name="btnGetList" value="请求Aajx1" onclick="Ajax1()">
<input type="button" name="btnGetList" value="请求GetJson" onclick="GetJson()">
6.定义js函数
function Ajax1()
{
var str=$("#txtDe").attr("value");
var jsonModel={};
jsonModel.requestParamName = str;
//alert($.toJSON(jsonModel));
// alert(jsonModel.serialize());
$.ajax({
type: "POST",
contentType: "application/json",
url: "ajaxAc!LoadList.action",
data: jsonModel,
dataType: "json",
success: function(result) {
alert($.toJSON(result));
},
error: function(result) {
alert("调用失败:" + result.responseText);
}
});
}
function GetJson()
{
$.getJSON("ajaxAc!WW.action?requestParamName=张三",function(data){
//通过.操作符可以从data.message中获得Action中message的值
alert($.toJSON(data));
$("#div").html("<font color='red'>message:"+data.message+
"<br>requestParamName:"+data.requestParamName+
"<br>jsonReuslt:"+data.jsonResult+"</font>");
});
}
重点提示(每次请求,都会默认将所以带get方法的属性,全部返回)
用<param>可配置返回的属性
<!-- 指定不需要被返回的属性,默认返回带get方法的所有属性 -->
<param name="excludeProperties">
list
</param>
<!-- 指定需要被返回的属性,默认返回带get方法的所有属性 -->
<param name="includeProperties">
</param>
备注(向Action中传入对象,没有实现)