首先在http://code.google.com/p/jsonplugin/downloads/list下载jsonplugin-0.34.jar
之后将jsonplugin-0.34.jar放入WEB-INF/lib中
之后使用prototype.js
Action代码
package com.platform.Action.SDCategory;
import java.util.HashMap;
import java.util.Map;
import com.googlecode.jsonplugin.annotations.JSON;
import com.opensymphony.xwork2.ActionSupport;
public class JsonExampleAction extends ActionSupport
{
private String field1;
private transient String field2;
private String field3;
private int[] ints = {10,20};
private Map map = new HashMap();
private String customName = "fini";
public String getField1()
{
return field1;
}
public void setField1(String field1)
{
this.field1 = field1;
}
public String getField2()
{
return field2;
}
public void setField2(String field2)
{
this.field2 = field2;
}
public String getField3()
{
return field3;
}
public void setField3(String field3)
{
this.field3 = field3;
}
public int[] getInts()
{
return ints;
}
public void setInts(int[] ints)
{
this.ints = ints;
}
public Map getMap()
{
return map;
}
public void setMap(Map map)
{
this.map = map;
}
@JSON(name="newName")
public String getCustomName()
{
return customName;
}
public void setCustomName(String customName)
{
this.customName = customName;
}
public String execute() throws Exception
{
map.put("name", "fuck");
return SUCCESS;
}
}
struts.xml
<package name="json" extends="json-default"> <action name="QueryChildCategory" class="QueryChildCategoryAction"> <result type="json"></result> </action> </package>
jsp页面
<script src="prototype.js" type="text/javascript"></script>
<script type="text/javascript">
function gotClick()
{
var url = 'JsonExample.action';
var params = Form.serialize('form1');
var myAjax = new Ajax.Request(url,{method:'post',parameters:params,onComplete:processResponse,asynchronous:true});
}
function processResponse(request)
{
var json = request.responseText
var jsonData = eval("("+json+")");
document.getElementById("show").innerHTML=jsonData["field1"]; }
</script>
<form id="form1" name="form1" method="post">
<input type="text" name="field1" id="field1"/><br>
<input type="text" name="field2" id="field2"/><br>
<input type="text" name="field3" id="field3"/><br>
<input type="button" value="提交" onClick="gotClick();"/>
</form>
<div id="show"></div>
或链接调用
script src="prototype.js" type="text/javascript"></script>
<script type="text/javascript">
function gotClick()
{
var url = 'JsonExample.action?no-cache='+Math.random();
var params = "";
var myAjax = new Ajax.Request(url,{method:'get',parameters:params,onComplete:processResponse});
}
function processResponse(request)
{
var json = request.responseText
var jsonData = eval("("+json+")");
//document.getElementById("show").innerHTML=jsonData["fuck"];
document.getElementById("show").innerHTML=request.responseText;
}
</script>
<a href="javascript:void(0)" οnclick="gotClick();">afafa</a>
<div id="show"></div>
var url = 'JsonExample.action?no-cache='+Math.random();无缓存
由于json-plugin会把action中的所有getter方法的属性序列化成json串,所以在整合spring开发时,需要将action中service对象的getter方法去掉,或者在前面增加@JSON(serialize=false),否则页面会报错com.googlecode.jsonplugin.JSONException: java.lang.reflect.InvocationTargetException