需求:
在登陆界面输入帐号密码,点击登陆按钮之后,在数据库查询账号密码是否正确。正确即登陆成功,错误即无法登陆。
简单分析:
在html页面表单输入账号密码,使用serializeArray()方法获取表单全部信息。在按钮提交事件中通过ajax方式提交到指定url,在controller类中进行接收帐号密码,并通过mybatis技术在数据库中查询是否正确。最后把信息返回到回调函数。
步骤分析:
1、登陆界面login.html
注:form表单id为:newForm,登陆按钮的id是btn_login
这里按钮并没有声明点击事件。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"> <!-- 引入thymleaf约束 -->
<head>
<meta charset="UTF-8">
<title>登陆</title>
<script type="text/javascript" src="/js/sys.js"></script> <!-- 引入sys.js资源 -->
</head>
<body style="text-align:center">
<form id="newForm">
<p>用户名:<input type="text" name="username" id="username" value="辛聪明" required><br></p>
<p>密 码:<input type="password" name="password" id="password" value="123" required><br></p>
<p><button type="submit" id="btn_login">登陆</button></p>
</form>
<th:block th:replace="common/include"> <!-- 引入jquery资源 -->
</th:block>
<th:block th:replace="js/login_js"> <!-- 引入login_js,注:放在最底下 -->
</th:block>
</body>
</html>
2、login_js页面
注:1、文档就绪事件:$(document)是一个选择器,加载了所有的html资源,$(document).ready 里的代码是在页面内容都加载完才执行的,所以放在login_js最下面
2、文件就绪事件调用了Login.init()方法,在Login.init()方法中主要调用了sys.js中的Sys.initSubmit()方法,并对此方法传递了“提交参数”和“提交方法”。
3、submitParam():提交参数、submitHandler:提交方法,具体提交方法内容封装在了 Sys.submitForm()中
"ajaxUrl": "/login.json"-->提交url
<script type="text/javascript">
var Login = function () {
return {
//main function to initiate the module
init: function () {
//初始化事件
this.initEvent();
//初始化提交
Sys
.initSubmit({
//提交参数
submitParam: {
"initForm": function () {
return true;
},
"btnSubmitingVal": "登录中...",
"btnVal":"登录",
"btnId": "btnLogin",
//"ajaxType":"post";
"ajaxUrl": "/login.json",
//"formId" : "newForm",
//"successTip":"操作成功!",
"successCallback": function (resp) {
if (!resp.success) {
$("#spanErrMsg").html(resp.resultMsg);
return;
}
location.href = "/index.html";
}
},
//提交方法
submitHandler: Sys.submitForm
});
},
/**
* 初始化事件
*/
initEvent: function () {
}
};
}();
//加载完毕以后执行
$(document).ready(function () {
Login.init();
});
</script>
3、sys.js是封装了提交方法等的JavaScript文件(只展示本节用到的代码)
(1)curParam是形式参数,实际参数是submitParam、submitHandler
(2)$('#' + param.formId) //按钮提交事件,当点击登陆,调param.submitHandler中ajax方式提交数据
.submit(function(){
param.submitHandler(param.submitParam);
});
(3)serializeObject()是自己设置的function,并用$.each()遍历,返回指定表单内所有内容
var Sys = {
initSubmit: function (curParam) {
console.log(JSON.stringify(curParam)); //在浏览器控制台打印出curParam的json格式
var defaultParam = {
formId: "newForm",
rules: {},
submitHandler: function () {
Sys.submitForm(curParam.submitParam);
}
};
var param = $.extend({}, defaultParam, curParam); //将defaultParam, curParam声明为全局变量
var form1 = $('#' + param.formId);
$('#' + param.formId) //按钮的提交事件
.submit(function(){
param.submitHandler(param.submitParam);
});
},
submitForm: function (curParam) {
if (!curParam.ajaxUrl) {
alert("请设置ajaxUrl!");
return;
}
if (!curParam.successUrl && !curParam.successCallback) {
alert("请设置successUrl 或 successCallback!");
return;
}
var defaultParam = {
dialogType: "alert",
btnSubmitingVal: "保存中...",
btnVal: "保存",
btnId: "btnSave",
ajaxType: "post",
formId: "newForm",
// ajaxUrl:"",
// successUrl:"",
successTip: "操作成功!"
};
var param = $.extend({}, defaultParam, curParam);
// alert(JSON.stringify(param));
var postData = JSON.stringify($("#" + param.formId).serializeObject());
if (param.buildData) {
postData = param.buildData();
}
// 调用初始化表单方法
if (param.initForm) {
if (!param.initForm()) {
return;
}
}
//按钮的文本
$("#" + param.btnId).html(param.btnSubmitingVal).attr("disabled", true);
$.ajax({
url: param.ajaxUrl,
type: param.ajaxType,
dataType: "json", //返回json类型数据
contentType: "application/json", //提交数据类型
data: postData, //提交的数据
success: function (resp) { //回调函数,resp是返回的数据
$("#" + param.btnId).html(param.btnVal).removeAttr("disabled");
if (param.successCallback) {
param.successCallback(resp);
return;
}
if (!resp.success) {
// 提示信息
Sys.alert(resp.resultMsg);
return;
}
Sys.alertSuccess({
"successMsg": param.successTip,
"callbackFunc": function () {
location.href = param.successUrl;
}
});
},
error: function (resp) {
// location.href =
// "/admin/err/500.html";
alert(resp.resultCode);
}
});
}
}
$.fn.serializeObject = function() {
var o = {};
var a = this.serializeArray(); //序列化表单,返回一个array类型
$.each(a, function() { //通过遍历将a数组中数据放在o中
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [ o[this.name] ];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
}
4、indexController: 接受数据,处理数据
(1)@RequestMapping(value = {"login.json"}) 对应 "ajaxUrl
(2)loginData.get("key")方法得到传递过来json数据中key所对应的value,即得到login.html中输入的帐号和密码
(3)User user = userService.selByName(name); 通过userService服务类的selByName()方法查询帐号在数据库中对应的密码,返回查询到信息封装到user中
package wang.doug.frame.controller;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import wang.doug.frame.common.BaseController;
import wang.doug.frame.common.BaseResult;
import wang.doug.frame.model.User;
import wang.doug.frame.service.UserService;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* 登录页面、首页
*/
@Controller
@RequestMapping("/")
public class IndexController extends BaseController {
private static final Log logger = LogFactory.getLog(IndexController.class);
@Resource
UserService userService;
/**
* 登录页面
* @param model
* @return
*/
@RequestMapping(value = {"", "login.html"})
public String toLogin(Model model) {
return "login";
}
/**
* 登录接口
*
* @param model
* @param loginData JSON格式的登录信息,可以使用Java类描述,也可以使用Map
* @return
*/
@RequestMapping(value = {"login.json"})
@ResponseBody
public BaseResult login(Model model, @RequestBody Map<String, Object> loginData
) {
//TODO: 从loginData中获取账号和密码,进行验证,根据验证结果返回信息
//控制类,根据你输入的账号密码与数据库对比
String name=loginData.get("loginName").toString();
String password = loginData.get("loginPwd").toString();
User user = userService.selByName(name);
BaseResult baseResult = new BaseResult();
if (user != null){
if (user.getPassword().equals(password)){
baseResult.setSuccess(true);
}else{
baseResult.setSuccess(false);
}
}
return baseResult;
}
}