2010.06.22(6)——— strtus2 + jquery ajax应用 自己看法
问题:
1. java.lang.NoSuchMethodError: com.opensymphony.xwork2.ActionContext.get(Ljava/lang/Object;)Ljava/lang/Object;
版本问题 切记:
jsonplugin-0.32.jar 用于struts-2.0.X
jsonplugin-0.34.jar 用于struts-2.1.X
2. No result defined for action
用jsonplugin action返回的字符串必须是struts2定义的的 如 SUCCESS 不能是自己定义的
用法:
1. 把jsonplugin-0.32.jar复制到web-inf的lib下面
2. action
public class AddListSortAction2 extends ActionSupport{
private static final long serialVersionUID = 1L;
private String str;
private AddListSortService addListSortService;
/**
* 获得所有的通讯录类别2
* @return
*/
public String getAllAddSort(){
List<AddListSort> list = this.addListSortService.queryAllAddListSort();
JSONArray json = JSONArray.fromObject(list);
this.str = json.toString();
System.out.println(str);
return SUCCESS;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
@JSON(serialize=false)
public AddListSortService getAddListSortService() {
return addListSortService;
}
public void setAddListSortService(AddListSortService addListSortService) {
this.addListSortService = addListSortService;
}
}
对于不想被序列化的属性,可以在他的get方法前加注释: @JSON(serialize=false)
3. struts.xml
<!-- ajax -->
<package name="sajax" extends="json-default" namespace="/ajax">
<action name="getAllAddSort" method="getAllAddSort" class="action.AddListSortAction2">
<result type="json" >
</result>
</action>
</package>
<!-- ajax -->
4. js
function ajax_leibie(){
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath}/ajax/getAllAddSort.action",
dataType: "json",
success: function(json){
var str = json.str; //得到的是字符串 要先转变成对象 才好处理
var j = eval('('+str+')');
$.each(j,function(i,o){
alert(j[i]["sortName"]);
});
}
});
}
注意 ::
当你的action是这样时
<action name="getAllAddSort" method="getAllAddSort" class="action.AddListSortAction2">
<result type="json" >
</result>
</action>
也就是说
你没有对AddListSortAction2里面的属性经行过滤 将会对所有有get方法的属性经行序列化
这样子 你在页面就得这样调用
var str = json.str;
json是返回的数据,
str是AddListSortAction2里面的一个属性
这时 返回的数据
json是一个对象
但是
当你的action是这样时:
<action name="getAllAddSort" method="getAllAddSort" class="action.AddListSortAction2">
<result type="json" >
<param name="root">str</param>
</result>
</action>
你只对str经行序列化 其他属性过滤
这样子 你在页面就得这样调用
var str = json;
json是返回的数据
这时 json是就是AddListSortAction2里面的str属性了
当有好几个变量都不需要初始化时 不用@JSON(serialize=false),可以用这个
<action name="showSB_SGQY" class="action.QiYeShangBao_ShiGongAction_page" method="page">
<result type="json">
<param name="excludeProperties">GC_SB_SGQYService</param>
</result>
</action>
这样GC_SB_SGQYService就不被序列化 其他的才会被序列化
后面可以写多个 用逗号分开