truts2,使用jquery操作ajax返回json数据,搞得相当之蛋疼!
问题出来一堆堆,先说正确解决的代码:
首先是action中:
private String result; //省略getter/setter代码 public String modify() throws Exception{ this.result=this.isOk(); return SUCCESS; } public String isOk(){ boolean isOk=new HouseDaoImpl().updateHouse(house); return isOk?"success":"error"; }
然后struts.xml中
<!--extends 基础的是json-default 而json-default里面有继承了struts-dafault的 --> <package name="json" extends="json-default"> <action name="modify" class="action.ManageAction" method="modify"> <result type="json"> <param name="root">result</param> </result> </action> </package>
最后jquery代码:
$(".update input[type='button']").click(function(){ $.post("modify",{ "house.id":$(".update input[type='hidden']").val(), "house.title":$(".update .title").val(), "house.street.id":$(".update .street option[selected='selected']").val(), "house.contact":$(".update .contact").val() },function(data){ if(data=="success"){ alert("修改成功"); location.reload(); }else{alert("修改失败!");} },"json"); /*这两个方法都行 上面的有传值,下面的没传值可以做测试*/ /* $.ajax({ url:"modify", type:"post", dataType:"json", error:function(){alert("错误");}, success:function(data){alert(data);} },"json"); */
然后再来说一说这过程中遇到的那些错误:
1.
2012-9-2 12:53:06 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet default threw exception java.lang.ClassNotFoundException: com.opensymphony.xwork2.util.TextUtils
解决方案是给 jsonplugin-0.34.jar 替换成 struts2-json-plugin-2.1.8.1.jar, json-lib-2.1.jar,struts2-junit-plugin-2.1.8.jar 这三个包 记得给jsonplugin-0.34.jar 删除
2.替换掉后可能会遇到新的问题,就是:
java.lang.ClassNotFoundException: org.apache.commons.lang.xwork.StringUtils
然后解决方案是:下载一个
xwork-core-2.1.6.jar 然后导入到项目中,而且以前的xwork-core-xxx.jar不能删掉
以上是我自己遇到的几个问题,问题不大,但也解决了好久.
原文:http://www.zhjie.net/struts2-jquery-ajax-returns-json-data.htm