标签:
1:首先要解决jar包的问题,我最近一直用maven搭建项目,所以把pom.xml复制到这。
要有struts2的核心包,struts2和Json整合的包,以及json lib。刚才转载了一篇解决json lib老是报错的博客,问题完美解决。
<dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-json-plugin</artifactId> <version>2.3.28.1</version> </dependency> <dependency> <groupId>net.sf.ezmorph</groupId> <artifactId>ezmorph</artifactId> <version>1.0.6</version> </dependency> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.2.2</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <!-- 只在编译时和测试时运行 --> <scope>provided</scope> </dependency> <!-- Struts2 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.24</version> </dependency> </dependencies>
2:login.jsp
先看看写好的表单,ajax一会再说吧。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Login Page</title> <script type="text/javascript" src="jquery-1.12.2.min.js"></script> </head> <body> <form action="#" method="post"> ID: <input type="text" name="id" id="id" /> <br/> Password:<input type="text" name="name" id="name"/> <br/> <input type="submit" value="Submit" id="submit" name="submit"/> </form> <script> function login(){ var $btn = $("#submit"); $btn.bind("click",function(){ $.ajax({ type:"post", url:"json.action", data:{ id : $("#id").val(), name : $("#name").val() }, dataType:"json", success:function(data){ var obj = eval ("(" + data + ")"); alert(obj.id); }, error:function(){ alert("失败"); } }); }); }; $(document).ready(function(){ login(); }); </script> </body> </html>
3:JsonAction.
在这里我们采取模型驱动的方式获取表单传递过来的值,然后在后台输出一下,当然我重写了Student的toString方法,Student类就不再展示了。
我们在action里创建了一个map,map是一个键值对的形式,Map<String,Object>,抛开Struts2不谈,json也是一个键值对形式,JSON 数据的书写格式是:名称/值对。
我们可以用JsonObject.fromObject()方法创建一个JSONObject对象
public static JSONObject fromObject(Object object)
{
return fromObject(object, new JsonConfig());
}
源码在这,明显是个static方法,我们用它获取对象。
然后我们把这个对象转换成字符串存到了一个变量中。我们可以在后面的struts.xml中看到这个字符串变量有什么用。
package com.oa.action; import java.util.HashMap; import java.util.Map; import com.oa.entity.Student; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import net.sf.json.JSONObject; public class JsonAction extends ActionSupport implements ModelDriven<Student> { private static final long serialVersionUID = 1L; private Student student = new Student(); private String result; public String getResult() { return result; } public void setResult(String result) { this.result = result; } /** * * 处理ajax请求 * * @return SUCCESS * */ @Override public String execute() { try { System.out.println(student); Map<String, Object> info=new HashMap<String,Object>(); info.put("id", student.getId()); info.put("name", student.getName()); JSONObject object=JSONObject.fromObject(info); result=object.toString(); } catch (Exception e) { e.printStackTrace(); } return SUCCESS; } @Override public Student getModel() { if (student == null) { student = new Student(); } return student; } }
4:struts.xml
有几点是必须的,result的type是Json,有点像之前用的struts2的文件下载,type就说stream,我们能看到action里的字符串变量写在这里。我们把这个result返回给前端页面,当然,别忘记result的setter getter方法。
<action name="json" class="com.oa.action.JsonAction"> <result type="json"> <param name="root"> result </param> </result> </action>
5:ajax
用的是jquery的ajax,要导入jquery的js文件,我用的是jquery-1.12.2.min.js。当然还有别的版本,用哪个都可以,去http://jquery.com/download/下载或者百度都可以。
url就说我们要提交到的action。data是要传递的参数,这里的id name和我实体类Student的属性是对应的。如果能正确返回,就执行success后面的方法,如果失败了,就执行error后面的方法。
data是一个字符串,因为我们返回的是result就说一个字符串,不过这个字符串是由JsonObject对象转换来的。
var obj = eval ("(" + data + ")");是用Javascript解析器,来解析Json文本,有兴趣可以看看http://www.w3school.com.cn/json/json_eval.asp,这里有详细介绍。我只想说Json也是键值对形式。我们可到了obj,然后就跟map差不多,你用key就可以得到value。obj.id就可以得到我们输入的id
$.ajax({
type:"post",
url:"json.action",
data:{
id : $("#id").val(),
name : $("#name").val()
},
dataType:"json",
success:function(data){
var obj = eval ("(" + data + ")");
alert(obj.id);
},
error:function(){
alert("失败");
}
});
6:页面效果
然而,我发现个问题,在Eclipse 里面没问题,能正常运行,在chrome里却不行,我又在搜狗里面试了试,也是可以的。
看来得研究研究为什么不能再chrome中运行了。
标签:
原文地址:http://www.cnblogs.com/zhao307/p/5469161.html