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