浏览 3740 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-14
最后修改:2009-05-15
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. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-09-13
谢谢这么好的例子 正要找这个呢
|
|
返回顶楼 | |