1. 在struts2中也可以像servlet一样来实现ajax---通过HttpServletResponse来实现。
2.实现步骤:
a)Action代码如下:
public class AjaxAction { private String name; public String ajax() throws IOException{ HttpServletResponse resp = ServletActionContext.getResponse(); if("siggy".equals(name)) resp.getWriter().print("true"); else{ resp.getWriter().print("false"); } return null; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
b) 配置文件如:
<action name="ajax" class="cn.sxt.action.AjaxAction" method="ajax"> </action>
c)Jsp:
<head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script> <script type="text/javascript"> $(function(){ $("#name").blur(function(){ $.post("ajax.action",{'name':$(this).val()},function(data){ if("true"==data){ $("#name").css("border","1px solid red"); }else{ $("#name").css("border","1px solid green"); } }); }); }); </script> </head> <body> 用户名:<input type="text" id="name" /> </body>
3.通过struts2 的插件来实现异步操作:
a) 导入 jar 包:
asm-3.3.jar asm-commons-3.3.jar asm-tree-3.3.jar commons-beanutils-1.8.0.jar commons-collections-3.1.jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang-2.4.jar commons-lang3-3.1.jar commons-logging-1.1.1.jar ezmorph-1.0.6.jar freemarker-2.3.19.jar jackson-core-asl-1.9.2.jar jackson-mapper-asl-1.9.2.jar javassist-3.11.0.GA.jar json-lib-2.3-jdk15.jar ognl-3.0.5.jar struts2-core-2.3.4.jar struts2-json-plugin-2.3.4.jar xwork-core-2.3.4.jar
b)编写Action类:
public class JsonAction { private JSONArray root; public String execute(){ List<User> list = new ArrayList<User>(); list.add(new User(1,"张三",33)); list.add(new User(2,"李四",23)); list.add(new User(3,"王五",34)); root = JSONArray.fromObject(list); return Action.SUCCESS; } public JSONArray getRoot() { return root; } public void setRoot(JSONArray root) { this.root = root; } }
c) 配置Action
<action name="json" class="cn.sxt.action.JsonAction">
<result type="json">
<param name="root">root</param>
</result>
</action>
d)jsp页面:
<script type="text/javascript" src="js/jquery-1.11.3.min.js"></script> <script type="text/javascript"> $(function(){ $("#btn").click(function(){ $.post("json.action",function(data){ var html=""; for(var i=0;i<data.length;i++){ html+="<tr><td>"+data[i].id+"</td><td>"+data[i].name+"</td><td>"+data[i].age+"</td></tr>"; } $("#content").html(html); }); }); }); </script> </head> <body> <button id="btn">获取数据</button> <table width="80%" align="center"> <tr> <td>编号</td> <td>姓名</td> <td>年龄</td> </tr> <tbody id="content"></tbody> </table> </body>
注意:以上是返回JSONArray,如果直接返回对象写法如下:
public class Json1Action { private List<User> list; public String execute(){ list = new ArrayList<User>(); list.add(new User(1,"张三",33)); list.add(new User(2,"李四",23)); list.add(new User(3,"王二麻子",34)); return Action.SUCCESS; } public List<User> getList() { return list; } public void setList(List<User> list) { this.list = list; } }
配置如下:
<action name="json" class="cn.sxt.action.Json1Action">
<result type="json">
<param name="root">list</param>
</result>
</action>