SSH2项目 LoginDemo 添加 AJAX
在前一篇教程中 Netbeans 整合 Struts2 Spring3 Hibernate3 登录演示 ,我们做了一个完整的基于 SSH2 的 登录演示。
这篇教程,我们将为它加入 AJAX 方式的 登录演示。
Struts2 对 AJAX 的支持是很方便的。加入 AJAX 只需要做非常小的改动即可。这篇教程中所提到的修改,均基于 LoginDemo项目。
具体步骤如下:
- 库文件依赖,为 Struts2 添加 AJAX 支持需要几个库文件包:
- json-lib-2.1.jdk15.jar
- struts2-json-plugin-2.2.1.1.jar
- struts2-jquery-plugin-2.5.0.jar
- 修改 Action 类 LoginAction.java 添加 JSON 格式的返回值。
package com.track2web.demo.action; import com.opensymphony.xwork2.ActionSupport; import com.track2web.demo.entity.User; import com.track2web.demo.service.IUserService; public class LoginAction extends ActionSupport { private User user; private IUserService userService; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public IUserService getUserService() { return userService; } public void setUserService(IUserService userService) { this.userService = userService; } /** * Ajax 方式所调用的 Action 方法 * @return 返回调用成功信号 */ public String loginAjax() { //将 登录信息保存至 user 属性,如果校验失败,user 属性值为 NULL this.user = this.userService.login(user); return SUCCESS; } /** * 普通登录方式调用的 ACTION 方法 * @return */ @Override public String execute() { //将 登录信息保存至 user 属性,如果校验失败,user 属性值为 NULL this.user = this.userService.login(user); if (user!=null) { return SUCCESS; } else { return ERROR; } } }
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 普通方式登录 --> <package name="login-demo" extends="struts-default"> <action name="loginAction" class="LoginAction"> <result name="success">/success.jsp</result> <result name="error" type="redirect">/index.jsp</result> </action> </package> <!-- AJAX方式登录 注意 extends 自 json-default 时 result 的 type 值才有 json 类型--> <package name="login-ajax" extends="json-default"> <!-- method 指定了 请求 Action 中哪个具体方法--> <action name="loginAjax" class="LoginAction" method="loginAjax"> <!-- 返回值类型为 json --> <result type="json"> <!-- 序列化 json 值时,不包括 NULL 值 属性--> <param name="excludeNullProperties"> <!-- 序列化 json 值时,不包括 的属性,userSerive 为 Spring 注入属性--> <param name="excludeProperties"> userService </param> </result> </action> </package> </struts>
<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <!-- 添加 jquery tag 库 --> <%@taglib prefix="sj" uri="/struts-jquery-tags" %> <!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"> <!-- 添加 JQUERY 库的 JS 库文件包含 --> <sj:head locale="zh_CN" jqueryui="true" /> <!-- AJAX 方式登录 callback 函数响应,可以写至专门的 JS 文件 --> <script type="text/javascript"> //当成功执行 ACTION 返回 JSON 值后的 CALLBACK $.subscribe("success", function(event) { //判断如果返回值中不存在 user 对象,输出 登录失败!否则输出登录成功! if (typeof(event.originalEvent.data.user)=="undefined") { $("#result").html("Sorry! Login Fail! Please try argin."); } else { $("#result").html("Welcome! Login Successful!"); } }); </script> <title>Login Demo</title> </head> <body style="text-align:center;"> <!--普通登录方式 同原来的例子没有区别,只是加入了点CSS--> <s:div cssStyle="border:#000000 solid 1px;width:400px;margin:0 auto;"> <span style="display:block;text-align:center;">Login Action Demo</span> <s:form action="loginAction" method="post" namespace="/login-demo" cssStyle="margin:0 auto;text-align:center;"> <s:textfield name="user.userName" label="USERNAME" /> <s:password name="user.userPass" label="USERPASS" /> <s:submit value="Login Action" /> </s:form> </s:div> <br /> <!-- AJAX 方式登录 --> <s:div cssStyle="border:#000000 solid 1px;width:400px;margin:0 auto;"> <span style="display:block;text-align:center;">Login AJAX Demo</span> <s:form action="loginAjax" method="post" namespace="/login-ajax" cssStyle="margin:0 auto;text-align:center;"> <s:textfield name="user.userName" label="USERNAME" /> <s:password name="user.userPass" label="USERPASS" /> <!-- 使用了 jquery 标签库的 submit 标签 targets - 登录后信息回显目标 onSuccessTopics - ACTION 执行成功返回 JSON 后调用的 callback 句柄 dataType - 定义 ACTION 返回值类型为 json --> <sj:submit value="Login AJAX" targets="result" onSuccessTopics="success" dataType="json" /> </s:form> <!-- AJAX方式登录,信息回显目标元素 --> <span id="result" ></span> </s:div> </body> </html>
Categories: 网页编程