2010.06.22(6)——— strtus2 + jquery ajax应用 自己看法

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就不被序列化 其他的才会被序列化
后面可以写多个 用逗号分开




你可能感兴趣的:(java,jquery,Ajax,json,struts)