首先上一个Jquery+Json+struts2的例子,这个例子是从网上抄下来的,调试过程中出现了一些问题,现记录下来:
test.jsp
User.java
JsonAction.java
struts.xml
在调试过程中出现的问题,
1、刚开始什么都不出现,DEBUG发现走到JSONObject jo = JSONObject.fromObject(user);这步就出错了,错误消息也没有打印出来,深入DEBUG发现缺少了运行json-lib必须的包。(有Exception但不打印出来,可能是没有配置log4j的缘故)
现在json需要的包列出来,
jsonplugin-0.33.jar
ezmorph-1.0.3.jar
json-lib-2.2.3-jdk15.jar
commons-collections.jar(版本应该要高一点,2.x版的好像少了org.apache.commons.collections.map.下面的一个类)
commons-beanutils.jar
环境都搭建好了,发现在firefox下面没有结果,jquery的$.ajax的success方法根本没有执行到。但是在IE6下面是正常的(IE的兼容性太强了),感觉到很奇怪。
弄了好长时间,还是决定配置下log4j.properties,看看是不是有些错误通过log4j打印出来的。(log4j.properties是从hibernate包下在拷来的)
发现在Firefox下面运行时出现warning, 在IE下面没有。
这个警告是struts2的,提交的action找不到.
其实并没有执行form里面的submit方法,就开始考虑是不是jquery提交ajax的时候错误,但是已经运行到JsonAction.
上网找找jquery提交ajax的问题,也没有找到任何结果。
最后尝试是不是多提交了一次form, 在<S:form ...>加了一个attribute:
OK了。
上面说错了,这个warning不是struts2的,是在WEB服务器解析jsp时候报出的warning.原因是form的action没有设置.
test.jsp
<%@ taglib prefix="s" uri="/struts-tags"%>
<SCRIPT type="text/javascript" src="js/jquery-1.2.6.js"></script>
<SCRIPT type="text/javascript">
$(document).ready(function () {
$("button").click(function () {
var params = $("input").serialize();
$.ajax({url:"jsonAction.action", type:"post",
dataType:"json", data:params, success : update_page});
});
});
function update_page(result) {
alert('abcd');
var json = eval('(' + result + ')');
var str = "First Name:" + json.firstname + "<br />";
str += "Last Name:" + json.lastname + "<br />";
str += "age:" + json.age + "<br />";
alert(str);
$("#result").html(str);
}
</SCRIPT>
<div id="result">
</div>
<s:form action="" method="post">
<s:textfield label="First Name" name="user.firstname" />
<s:textfield label="Last Name" name="user.lastname" />
<s:textfield label="age" name="user.age" />
<button>Submit</button>
</s:form>
User.java
public class User implements Serializable {
private Integer id;
private String firstname;
private String lastname;
private Integer age;
// 省略get, set方法
}
JsonAction.java
public class JsonAction extends ActionSupport {
private User user;
// 用于记录返回结果
private String result;
// 省略相应的get和set方法
@SuppressWarnings("static-access")
public String execute() throws Exception {
// 将要返回的user实体对象进行json处理
JSONObject jo = JSONObject.fromObject(user);
// 打印一下,格式如下
//{"age":3,"firstname":"xxx","id":0,"lastname":"xxxxx"}
System.out.println(jo);
// 调用json对象的toString方法转换为字符串然后赋值给result
this.result = jo.toString();
return this.SUCCESS;
}
}
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2" extends="json-default">
<action name="jsonAction"
class="com.marinda.action.JsonAction">
<result type="json">
<!-- 因为要将reslut的值返回给客户端,所以这样设置 -->
<!-- root的值对应要返回的值的属性 -->
<param name="root">result</param>
<!--
<param name="ignoreHierarchy">false</param>
<param name="noCache">true</param>
<param name="excludeNullProperties">true</param>
-->
</result>
</action>
</package>
</struts>
在调试过程中出现的问题,
1、刚开始什么都不出现,DEBUG发现走到JSONObject jo = JSONObject.fromObject(user);这步就出错了,错误消息也没有打印出来,深入DEBUG发现缺少了运行json-lib必须的包。(有Exception但不打印出来,可能是没有配置log4j的缘故)
现在json需要的包列出来,
jsonplugin-0.33.jar
ezmorph-1.0.3.jar
json-lib-2.2.3-jdk15.jar
commons-collections.jar(版本应该要高一点,2.x版的好像少了org.apache.commons.collections.map.下面的一个类)
commons-beanutils.jar
环境都搭建好了,发现在firefox下面没有结果,jquery的$.ajax的success方法根本没有执行到。但是在IE6下面是正常的(IE的兼容性太强了),感觉到很奇怪。
弄了好长时间,还是决定配置下log4j.properties,看看是不是有些错误通过log4j打印出来的。(log4j.properties是从hibernate包下在拷来的)
发现在Firefox下面运行时出现warning, 在IE下面没有。
WARN ServletUrlRenderer:45 - No configuration found for the specified action: '' in namespace: ''. Form action defaulting to 'action' attribute's literal value.
这个警告是struts2的,提交的action找不到.
其实并没有执行form里面的submit方法,就开始考虑是不是jquery提交ajax的时候错误,但是已经运行到JsonAction.
上网找找jquery提交ajax的问题,也没有找到任何结果。
最后尝试是不是多提交了一次form, 在<S:form ...>加了一个attribute:
<s:form action="" method="post" onsubmit="return false;">
OK了。
上面说错了,这个warning不是struts2的,是在WEB服务器解析jsp时候报出的warning.原因是form的action没有设置.
WARN ServletUrlRenderer:45 - No configuration found for the specified action: '' in namespace: ''. Form action defaulting to 'action' attribute's literal value.
本文介绍了一个使用JQuery与Struts2框架进行JSON数据交互的示例,并详细记录了调试过程中遇到的问题及解决方法。
7477

被折叠的 条评论
为什么被折叠?



