. 安裝 msi版本
2. 添加刪除數據庫(DB)
`create database database_name;` 建立`database_name`數據庫
`show databases;` 顯示當前所有的數據庫
`drop database database_name;` 刪除database_name數據庫
`use database_name;`使用`database_name`數據庫
3. mysql的數據類型
**數值類型 文本類型 時間類型**
https://www.cnblogs.com/-xlp/p/8617760.html
4. 添加和刪除數據表(table)
https://www.cnblogs.com/whgk/p/6158107.html
```sql
create table table_name(
id bigint(20),
..
..);
drop table table_name(
```
5. 給數據表添加或者刪除列'
```sql
alter table table_name add column_name;'添加表'
alter table table_name drop column_name;'刪除表'
alter table table_name rename new_table_name;'重命名表'
```
6. 修改某個數據列的名字或者數據類型
```sql
alter table table_name change old_table_name new_table_name data type
alter table account change city newcity varchar(255);'修改列的名字,但不修改數據類型'
alter table account change newcity newcity text;'修改數據類型'
alter table account change newcity city varchat;'列的名字和數據類型同時修改;'
```
7. 查看或者插入表格
```sql
select * from tabel_name;查看所有表內容
select col_name1,col_name2,....from table_name;'查看表內某幾列的內容;'
insert into table_name values (值1,值2)
insert into table_name values(列1,列2...)values (值1,值2...)
```
8. wherer 查詢條件
```sql
select * form table_name
where col_name 運算符 ;
= ,!,=, >, <, <=, >=,between, like '通過 and or 多個條件篩選'
ex:
select *form table_name where col1=xxx and col2 = xx or col3>xxx;
```
9. null 的判斷
```sql
' 對于null的判讀不能用= 或者!=來判斷 需要用 is 或者is not '
select * form table_name where col_name is null;
```
10. select distinct去掉重復查詢結果
```sql
select distinct col_name from table_name;'將重復的結果篩選掉。多次只輸出一次。'
```
11. 使用order by對查詢結果排序
```sql
'按照單一列名排序'
select *form table_name [where 子句] order by col_name[asc/desc]
'where 子句不能與order by子句置換'
'按照多列排序'
select *form table_name [where 子句] order by col_name[asc/desc] ,col2[asc/desc]
```
12. 使用limit截取查詢結果
只顯示前三行
`select * form table_name [where 子句][order by 子句]limit[offset,]rowcount`
`offset` 表示記錄從第一行 0開始 要開始截取的位置 比如 從第三行開始 offset =2,
`rowcount` 是從 `offset` 開始獲取截取的在那個條數
舉例 `limit 1,2` 是從第二條開始截取兩條 結果輸出第二 第三行記錄。
13. 插入命令`insert`和查詢命令`select`的組合使用
-將一個表格內的數據插入到另一個表格。-
```
insert into table_name values (值1,值2)
insert into table_name values(列1,列2...)values (值1,值2...)
'組合用法'
insert into table_name1 select col1,col2 from table_name2
insert into table_name1 (col1,col2) select col3,col4 from table_name2
```
14. 更新表的數據
修改單列
`updata table_name set col_name=xxx[where 字句]`
修改多列
`updata table_name set col_name=xxx,col2_name=xxx[where 字句]`
15. where語句中in操作符使用
```sql
select * form tabel_name [where col_name in(value1,value2...)]
select * from table_name [where col_name in(select篩選語句)]
```
16. where語句中between操作符使用
```sql
select * form tabel_name [where col_name between value1 and value2]
select * from table_name[where col_name not between value1 and value2]
```
17. where語句中like操作符使用
① B/S架構:Browser/Server(瀏覽器/服務器的交互形式。)
② C/S架構:Client/Server(客戶端/服務器的交互形式。)
① 什么是HTML?② 怎么開發HTML?③ 怎么運行HTML?
?由大量的標簽組成,每一個標簽都有開始標簽和結束標簽。
?超文本:圖片、聲音、視頻等
?編輯器有:HBuilder、vscode等
③ 直接采用瀏覽器打開HTML文件就能運行
④ HTML是誰制定的?
?W3C制定了HTML的規范:每個瀏覽器生產廠家都會遵守規范。HTML也會按照規范去寫代碼
?HTML規范目前最高的版本是:HTML5.0,簡稱H5
?我們現在主要學的HTML4.0(基本用法)
?w3school:先出現的,和W3C無關
?w3cschool:后出現的,和W3C無關
?W3C制定了很多規范:HTML/XML/http協議/https協議……
頁面效果圖:
超鏈接的作用:
通過超鏈接可以從瀏覽器向服務器發送請求。
效果圖:
地址欄提交的信息:
?username=abc&userpassowrd=1234&sex=1&aihao=study&aihao=dream&myText=我沒有value屬性;&position=ln&myFile=&myHidden=
14、表單的說明:
?有用嗎?對于學完Spring、SpringMVC、Mybatis還無從下手的同學來說這是一個很好引子。對于正在學習同一個案例的同學,可能解決一些問題。對于需要這個案例的同學可以直接獲取。
??有什么?:xml配置文件編寫,引入一個簡單的前端框架,使用MyBatis Generator逆向工程生成一些代碼,使用框架簡單快速搭建一個頁面,好用的分頁工具PageHelper,簡單的前后端分離,發送ajax請求,利用json傳遞數據,增、刪、改、查的簡單實現。
??簡單嗎?內容很簡單,涉及Java代碼不多,但是對于新手來說,最困難的部分是各種環境搭建、配置文件、版本沖突,如果能夠根據錯誤提示動手解決,那就是一大進步。
??怎么學?如果有時間可以在B站搜索:ssm整合crud,雷豐陽講的。如果想看到每個功能的實現過程和源碼,可以在這里學習,每個步驟都有注釋。也可以作為復習快速瀏覽。
前端格式校驗、用戶名校驗、后端校驗、JSR303校驗,效果如圖
使用彈出模態框作為新增模塊,參考Bootstrap代碼
<!-- 為新增按鈕增加模態框 ,利用按鈕綁定單擊事件-->
<!-- Modal -->
<div class="modal fade" id="empAddModal" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">員工添加</h4>
</div>
<div class="modal-body">
<!-- 添加表單 -->
<form class="form-horizontal" id="model-form">
<!-- 姓名 -->
<div class="form-group">
<label for="empName_add_input" class="col-sm-2 control-label">EmpName</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="empName" id="empName_add_input"
placeholder="empName">
<!-- 用來顯示錯誤提示 -->
<span class="help-block"></span>
</div>
</div>
<!-- 郵箱 -->
<div class="form-group">
<label for="email_add_input" class="col-sm-2 control-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" name="email" id="email_add_input"
placeholder="empName@123.com">
<!-- 用來顯示錯誤提示 -->
<span class="help-block"></span>
</div>
</div>
<!-- 性別 -->
<div class="form-group">
<label class="col-sm-2 control-label">Gender</label>
<div class="col-sm-10">
<!-- 單選 -->
<label for="gender1_add_input"> <input type="radio"
name="gender" id="gender1_add_input"
name="gender" value="M" checked>
男
</label>
<label for="gender2_add_input"> <input type="radio"
name="gender" id="gender2_add_input"
name="gender" value="F">
女
</label>
</div>
</div>
<!-- 部門下拉框 -->
<div class="form-group">
<label class="col-sm-2 control-label">DeptName</label>
<div class="col-sm-10">
<!-- 部門下拉列表使用ajax查詢出來的動態拼接,值為部門id -->
<select class="form-control" name="dId" id="deptName_add_select"></select>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">關閉</button>
<button type="button" class="btn btn-primary" id="emp_save_btn">保存</button>
</div>
</div>
</div>
</div>
//添加模態欄 $("#emp_add_modal_btn").click(function() {
//顯示模態框
$("#empAddModal").modal({
//模態框參數,點擊背景不關閉
backdrop : "static"
});
});
//新增模態框 $("#emp_add_modal_btn").click(function() {
//添加模態欄之前將所表單信息清空,包括兩項驗證的css樣式,顯示模態欄之后就是空的
//reset()方法是dom下的,使用[0]
$("#empAddModal form")[0].reset();
//清空輸入格式、重名校驗的css樣式
reset_form("#empAddModal form");
//獲取所有部門信息
getDepts("#deptName_add_select");
//添加模態框,在模態框中需要所有部門,所以需要查詢所有部門信息
$("#empAddModal").modal({
//模態框參數,點擊背景不關閉
backdrop : "static"
});
});
//后面用
//新增模態框--清除表單數據,樣式
function reset_form(ele) {
$(ele)[0].reset();
//該元素下所有css清除
$(ele).find("*").removeClass("has-error has-success");
//顯示警告信息部分清空
$(ele).find(".help-block").text("");
}
//新增模態框--請求所有部門信息 function getDepts(ele){
//---注意這里要清空---
$(ele).empty();
$.ajax({
url:"${PATH}/depts",
type:"GET",
success:function(result){
//console.log(result);
//動態拼接
}
});
}
package com.ssm.controller;
import com.ssm.bean.Department;
import com.ssm.bean.Msg;
import com.ssm.service.DepartmentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* 部門信息
*/
@Controller
public class DepartmentController {
@Autowired
private DepartmentService departmentService;
/**
* 獲取所有部門信息
* @return
*/
@ResponseBody
@RequestMapping("/depts")
public Msg getDepts() {
List<Department> depts = departmentService.getDepts();
return Msg.success().add("depts", depts);
}
}
package com.ssm.service;
import com.ssm.bean.Department;
import com.ssm.dao.DepartmentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 部門信息
*/
@Service
public class DepartmentService {
@Autowired
DepartmentMapper departmentMapper;
/**
* 查詢所有部門
*/
public List<Department> getDepts(){
//方法本身可以添加查詢條件,如果為null代表查所有
List<Department> list = departmentMapper.selectByExample(null);
return list;
}
}
//新增模態框--請求所有部門信息 function getDepts(ele){
//---注意這里要清空---
$(ele).empty();
$.ajax({
url:"${PATH}/depts",
type:"GET",
success:function(result){
//console.log(result);
$.each(result.extend.depts,function(index,item){
//創建出option并添加到select中
var optionEle = $("<option></option>").append(item.deptName).attr("value",item.deptId);
optionEle.appendTo(ele);
});
}
});
}
效果
綁定保存按鈕
//------------------增刪改查都使用REST風格------------------- //新增保存信息
$("#emp_save_btn").click(function(){
//1、模態框中填寫的表單數據提交給服務器進行保存
//2、發送ajax請求保存員工
$.ajax({
url:"${PATH}/saveemp",
type:"POST",
data:$("#empAddModal form").serialize(),
//.serialize()方法能將表單中數據序列化,直接發送給controll封裝成Bean
//console.log($("#empAddModal form").serialize());
//empName=Tom&email=Tom%40123.com&gender=M&dId=1
success:function(result){
//1.添加成功,關閉模態框
$("#empAddModal").modal("hide");
//2.來到最后一頁,顯示插入的數據,可以直接跳到一個很大的頁數,因為
//合理性,所以不會超出,這里使用全局參數,數據總條數
to_page(totalRecord+1);
}
});
EmployeeController
@ResponseBody @RequestMapping(value = "/saveemp",method = RequestMethod.POST)
public Msg saveEmp(Employee employee, BindingResult result) {
employeeService.saveEmp(employee);
return Msg.success();
}
EmployeeService
/**
* 保存emp員工,insert
* @param employee
*/
public void saveEmp(Employee employee) {
//這個是有選擇插入,insert()全插入,包括id
employeeMapper.insertSelective(employee);
}
一共有兩種驗證方式 1.輸入框焦點單獨驗證 2.提交按鈕總驗證,為了不兩種方式的css樣式相互覆蓋,每種方式都驗兩遍,格式在前,用戶名在后
(內部Java格式驗證)+ ajax用戶名驗證(實現方法看下一小節)
//1.(內部Java格式驗證)+ ajax用戶名驗證 //新增保存信息--ajax用戶名校驗
//由于在java內又做了一次格式驗證,所以這個方法相當于即驗證了格式,又驗證了重名
$("#empName_add_input").blur(function () {
//發送ajax請求,驗證用戶名是否可用
var empName = this.value;
$.ajax({
url: "${PATH}/checkname",
data: "empName=" + empName,
type: "POST",
success: function (result) {
console.log(result);
//獲取到返回值,Msg中的狀態碼
if (result.code == 2333) {
show_validate_msg("#empName_add_input", "success", "用戶名可用");
//因為使用了兩種方式驗證,格式和重名,會有css樣式沖突覆蓋,所以再加一次驗證
//自定義屬性,或全局變量
//給添加按鈕添加自定義屬性,在提交時判斷是否通過兩項驗證。
$("#emp_save_btn").attr("ajax-vl", "success");
} else if (result.code == 5555) {
show_validate_msg("#empName_add_input", "error", result.extend.msg);
$("#emp_save_btn").attr("ajax-vl", "error");
}
}
});
});
郵箱格式獨立校驗
//2. 郵箱獨立驗證 //新增保存信息--獨立郵箱格式驗證
$("#email_add_input").blur(function () {
var email = $("#email_add_input").val();
var regEmail = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
if (!regEmail.test(email)) {
//alert("郵箱格式不正確");
show_validate_msg("#email_add_input", "error", "郵箱格式不正確");
//return false;
} else {
show_validate_msg("#email_add_input", "success", "");
}
//最后方法通過
//return true;
})
格式+用戶名驗證+提交保存請求
//3. 格式+用戶名驗證+提交保存請求,一共有兩種驗證方式 1.輸入框焦點單獨驗證 2.提交按鈕總驗證, //為了不兩種方式的css樣式相互覆蓋,每種方式都驗兩遍,格式在前,用戶名在后
//新增保存信息--請求
$("#emp_save_btn").click(function () {
//點擊就發送請求,保存使用POST請求
//1.先驗證ajax重名校驗,防止用戶輸入重復用戶名之后,直接輸入正確的郵箱,點擊提交,重名的驗證提示會被覆蓋
//ajax-vl是ajax重名校驗之后添加的自定義屬性,用于表示提交按鈕是否可用
if ($(this).attr("ajax-vl") == "error") {
return false;
}
//2.點擊保存按鈕請求之前完整驗證一遍輸入格式
//JQuery格式總驗證
if (!validate_add_form()) {
return false;
}
//3.重名驗證
//ajax重名校驗
if ($(this).attr("ajax-vl") == "error") {
return false;
}
//1、模態框中填寫的表單數據提交給服務器進行保存
//2、發送ajax請求保存員工
$.ajax({
url: "${PATH}/saveemp",
type: "POST",
data: $("#empAddModal form").serialize(),
//.serialize()方法能將表單中數據序列化,直接發送給controll封裝成Bean
//console.log($("#empAddModal form").serialize());
//empName=Tom&email=Tom%40123.com&gender=M&dId=1
success: function (result) {
//1.添加成功,關閉模態框
$("#empAddModal").modal("hide");
//2.來到最后一頁,顯示插入的數據,可以直接跳到一個很大的頁數,因為
//合理性,所以不會超出,這里使用全局參數,參數值在上面分頁時獲取的,數據總條數+1保證不出現極端情況
to_page(totalRecord + 1);
}
});
});
請求按鈕JQuery格式總校驗方法
//新增保存信息--請求按鈕JQuery格式總校驗方法 function validate_add_form() {
console.log("validate_add_form()")
//1.拿到校驗的數據,使用正則表達式
//根據bootstrap提供的組件
//校驗用戶名
var empName = $("#empName_add_input").val();
var regName = /(^[a-zA-Z0-9_-]{2,8}$)|(^[\u2E80-\u9FFF]{2,5})/;
if (!regName.test(empName)) {
//alert("用戶名可以是2-5位中文或者2-8位英文和數字的組合");
show_validate_msg("#empName_add_input", "error", "用戶名可以是2-5位中文或者2-8位英文和數字的組合");
return false;
} else {
show_validate_msg("#empName_add_input", "success", "");
}
//2、校驗郵箱信息
var email = $("#email_add_input").val();
var regEmail = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
if (!regEmail.test(email)) {
//alert("郵箱格式不正確");
show_validate_msg("#email_add_input", "error", "郵箱格式不正確");
return false;
} else {
show_validate_msg("#email_add_input", "success", "");
}
//最后方法通過
return true;
}
添加樣式方法
//新增保存信息--添加css樣式 //show_validate_msg顯示校驗狀態,通過添加樣式,ele表示被選擇元素,status狀態
//用來判斷是用什么樣式,綠色、紅色,msg提示信息
function show_validate_msg(ele, status, msg) {
//判斷之前先清空之前樣式
$(ele).parent().removeClass("has-success has-error");
$(ele).next("span").text("");
if ("success" == status) {
$(ele).parent().addClass("has-success");
$(ele).next("span").text(msg)
} else if ("error" == status) {
$(ele).parent().addClass("has-error");
$(ele).next("span").text(msg)
}
}
如果添加相同的用戶名會造成混淆,所以在輸入用戶名之后立即進行校驗
發送ajax請求(與上一節相同)
$("#empName_add_input").blur(function () {
//發送ajax請求,驗證用戶名是否可用
var empName = this.value;
$.ajax({
url: "${PATH}/checkname",
data: "empName=" + empName,
type: "POST",
success: function (result) {
console.log(result);
//獲取到返回值,Msg中的狀態碼
if (result.code == 2333) {
show_validate_msg("#empName_add_input", "success", "用戶名可用");
//因為使用了兩種方式驗證,格式和重名,會有css樣式沖突覆蓋,所以再加一次驗證
//自定義屬性,或全局變量
//給添加按鈕添加自定義屬性,在提交時判斷是否通過兩項驗證。
$("#emp_save_btn").attr("ajax-vl", "success");
} else if (result.code == 5555) {
show_validate_msg("#empName_add_input", "error", result.extend.msg);
$("#emp_save_btn").attr("ajax-vl", "error");
}
}
});
});
EmployeeController
/**
* 用戶名查重
* 前端校驗,在失去焦點,保存之前都校驗
* @param empName
* @return
*/
@ResponseBody
@RequestMapping("/checkname")
public Msg checkEmpName(@RequestParam("empName")String empName) {
//用戶名格式校驗
String regx = "(^[a-zA-Z0-9_-]{2,8}$)|(^[\\u2E80-\\u9FFF]{2,5})";
if(!empName.matches(regx)){
return Msg.fail().add("msg", "用戶名可以是2-5位中文或者2-8位英文和數字的組合");
}
//返回查詢統計結果,true說明沒有重名
boolean b = employeeService.checkEmpName(empName);
if(b) {
return Msg.success();
}else {
return Msg.fail().add("msg", "用戶名已存在");
}
}
EmployeeService
/**
* 查詢用戶是否存在
* 使用Example復雜查詢
*
* @param name
* @return
*/
public boolean checkEmpName(String name) {
//Example用法
EmployeeExample example = new EmployeeExample();
//創建查詢條件
EmployeeExample.Criteria criteria = example.createCriteria();
//我的理解:這一句相當于添加了一個條件 where empName=name
criteria.andEmpNameEqualTo(name);
//統計查詢結構
long count = employeeMapper.countByExample(example);
//返回true(0)說明沒有重復用戶名
return count == 0;
}
前面是前端校驗,現在是后端校驗,針對Java
添加JSR303依賴
<!-- JSR303校驗 -->
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.0.Final</version>
</dependency>
在JavaBean上添加注解
public class Employee {
private Integer empId;
//JSR303自定義校驗規則
@Pattern(regexp = "(^[a-zA-Z0-9_-]{2,8}$)|(^[\\u2E80-\\u9FFF]{2,5})", message = "用戶名可以是2-5位中文或者2-8位英文和數字的組合")
private String empName;
private String gender;
@Pattern(regexp = "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$",message = "郵箱格式不正確")
private String email;
//...
在Controller方法中使用,在參數前添加注解,在參數后面添加結果參數
/**
* 新增,保存用戶,并驗證
*
* 添加JSR303校驗
* @Valid表示校驗下一個對象
* BindingResult緊跟被校驗對象,接收結果
*
* @param employee
* @return
*/
@ResponseBody
@RequestMapping(value = "/saveemp",method = RequestMethod.POST)
public Msg saveEmp(@Valid Employee employee, BindingResult result) {
if(result.hasErrors()) {
//格式校驗失敗,返回信息
Map<String ,Object> map = new HashMap<>();
List<FieldError> fieldErrors = result.getFieldErrors();
for(FieldError error : fieldErrors) {
System.out.println("錯誤的字段名:" + error.getField());
System.out.println("錯誤信息:" + error.getDefaultMessage());
//將錯誤信息放到map中
map.put(error.getField(), error.getDefaultMessage());
}
return Msg.fail().add("errorFields", map);
}else if(!employeeService.checkEmpName(employee.getEmpName())){
//后端在保存的時候再次驗證是否存在用戶名---有點 重復的感覺???
//因為是在一起接收所以錯誤信息一定要一樣,empName手動寫上
return Msg.fail().add("empName", "用戶名已存在");
}else {
employeeService.saveEmp(employee);
//不用這種:獲取總頁數,用在新增完之后跳轉到最后一頁,不過這樣就會多查一次數據庫
//PageInfo<Employee> pageInfo = employeeService.getPage(null);
//return Msg.success().add("pageInfo", pageInfo);
return Msg.success();
}
}
在index.jsp提交按鈕中處理返回結果
//3. 格式+用戶名驗證+提交保存請求,一共有兩種驗證方式 1.輸入框焦點單獨驗證 2.提交按鈕總驗證, //為了不兩種方式的css樣式相互覆蓋,每種方式都驗兩遍,格式在前,用戶名在后
//新增保存信息--請求
$("#emp_save_btn").click(function () {
//點擊就發送請求,保存使用POST請求
//1.先驗證ajax重名校驗,防止用戶輸入重復用戶名之后,直接輸入正確的郵箱,點擊提交,重名的驗證提示會被覆蓋
if ($(this).attr("ajax-vl") == "error") {
return false;
}
//2.點擊保存按鈕請求之前完整驗證一遍輸入格式
console.log("JQuery格式總驗證")
//方法一:JQuery格式總驗證
if (!validate_add_form()) {
return false;
}
//3.重名驗證
console.log("ajax重名校驗")
//ajax重名校驗
if ($(this).attr("ajax-vl") == "error") {
return false;
}
//1、模態框中填寫的表單數據提交給服務器進行保存
//2、發送ajax請求保存員工
$.ajax({
url: "${PATH}/saveemp",
type: "POST",
data: $("#empAddModal form").serialize(),
//.serialize()方法能將表單中數據序列化,直接發送給controll封裝成Bean
//console.log($("#empAddModal form").serialize());
//empName=Tom&email=Tom%40123.com&gender=M&dId=1
success: function (result) {
//清除模態框和提示信息
$("#empAddModal form").find("*").removeClass("has-error has-success");
$("#empAddModal form").find(".help-block").text("");
//在這里判斷后端JSR303校驗結果,最后一次!!!!!!!!!真的
//前后端驗證可以獨立運行,注釋前端后端也能實現一樣效果
if(result.code == 2333){
//alert(result.msg);
//1.添加成功,關閉模態框
$("#empAddModal").modal("hide");
//2.來到最后一頁,顯示插入的數據,可以直接跳到一個很大的頁數,因為
//合理性,所以不會超出,這里使用全局參數,數據總條數+1保證不出現極端情況
to_page(totalRecord + 1);
}else{
//失敗,顯示信息,有幾個就顯示幾個
//undefined 就是沒找到這個錯誤,說明正確,可用alert(result.extend.errorFields.empName)驗證
//用戶名格式
//alert(result.extend.errorFields.empName)
//用戶名格式和查重,因為查重的屬性格式和格式驗證不同,所以不能分開
//result.extend.errorFields.empName 格式驗證
//result.extend.empName 查重驗證
if(undefined != result.extend.errorFields ){
//格式錯誤
if(undefined != result.extend.errorFields.empName){
show_validate_msg("#empName_add_input","error",result.extend.errorFields.empName);
}
}else{
if(undefined != result.extend.empName){
//查重錯誤
show_validate_msg("#empName_add_input","error",result.extend.empName);
}
}
//郵箱格式判斷
if(undefined != result.extend.errorFields){
if(undefined != result.extend.errorFields.email){
show_validate_msg("#email_add_input","error",result.extend.errorFields.email);
}
}
}
}
});
});
模態框
<!-- 為新增按鈕增加模態框 ,利用按鈕綁定單擊事件-->
<!-- Modal -->
<div class="modal fade" id="empAddModal" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">員工添加</h4>
</div>
<div class="modal-body">
<!-- 添加表單 -->
<form class="form-horizontal" id="model-form">
<!-- 姓名 -->
<div class="form-group">
<label for="empName_add_input" class="col-sm-2 control-label">EmpName</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="empName" id="empName_add_input"
placeholder="empName">
<!-- 用來顯示錯誤提示 -->
<span class="help-block"></span>
</div>
</div>
<!-- 郵箱 -->
<div class="form-group">
<label for="email_add_input" class="col-sm-2 control-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" name="email" id="email_add_input"
placeholder="empName@123.com">
<!-- 用來顯示錯誤提示 -->
<span class="help-block"></span>
</div>
</div>
<!-- 性別 -->
<div class="form-group">
<label class="col-sm-2 control-label">Gender</label>
<div class="col-sm-10">
<!-- 單選 -->
<label for="gender1_add_input"> <input type="radio"
name="gender" id="gender1_add_input"
name="gender" value="M" checked>
男
</label>
<label for="gender2_add_input"> <input type="radio"
name="gender" id="gender2_add_input"
name="gender" value="F">
女
</label>
</div>
</div>
<!-- 部門下拉框 -->
<div class="form-group">
<label class="col-sm-2 control-label">DeptName</label>
<div class="col-sm-10">
<!-- 部門下拉列表使用ajax查詢出來的動態拼接,值為部門id -->
<select class="form-control" name="dId" id="deptName_add_select"></select>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">關閉</button>
<button type="button" class="btn btn-primary" id="emp_save_btn">保存</button>
</div>
</div>
</div>
</div>
請求和方法
<script type="text/javascript">
//------------------增刪改查都使用REST風格-------------------
//1.(內部Java格式驗證)+ ajax用戶名驗證
//新增保存信息--ajax用戶名校驗
//由于在java內又做了一次格式驗證,所以這個方法相當于即驗證了格式,又驗證了重名
$("#empName_add_input").blur(function () {
//發送ajax請求,驗證用戶名是否可用
var empName = this.value;
$.ajax({
url: "${PATH}/checkname",
data: "empName=" + empName,
type: "POST",
success: function (result) {
console.log(result);
//獲取到返回值,Msg中的狀態碼
if (result.code == 2333) {
show_validate_msg("#empName_add_input", "success", "用戶名可用");
//因為使用了兩種方式驗證,格式和重名,會有css樣式沖突覆蓋,所以再加一次驗證
//自定義屬性,或全局變量
//給添加按鈕添加自定義屬性,在提交時判斷是否通過兩項驗證。
$("#emp_save_btn").attr("ajax-vl", "success");
} else if (result.code == 5555) {
show_validate_msg("#empName_add_input", "error", result.extend.msg);
$("#emp_save_btn").attr("ajax-vl", "error");
}
}
});
});
//2. 郵箱獨立驗證
//新增保存信息--獨立郵箱格式驗證
$("#email_add_input").blur(function () {
var email = $("#email_add_input").val();
var regEmail = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
if (!regEmail.test(email)) {
//alert("郵箱格式不正確");
show_validate_msg("#email_add_input", "error", "郵箱格式不正確");
//return false;
} else {
show_validate_msg("#email_add_input", "success", "");
}
//最后方法通過
//return true;
})
//3. 格式+用戶名驗證+提交保存請求,一共有兩種驗證方式 1.輸入框焦點單獨驗證 2.提交按鈕總驗證,
//為了不兩種方式的css樣式相互覆蓋,每種方式都驗兩遍,格式在前,用戶名在后
//新增保存信息--請求
$("#emp_save_btn").click(function () {
//點擊就發送請求,保存使用POST請求
//1.先驗證ajax重名校驗,防止用戶輸入重復用戶名之后,直接輸入正確的郵箱,點擊提交,重名的驗證提示會被覆蓋
if ($(this).attr("ajax-vl") == "error") {
return false;
}
//2.點擊保存按鈕請求之前完整驗證一遍輸入格式
console.log("JQuery格式總驗證")
//方法一:JQuery格式總驗證
if (!validate_add_form()) {
return false;
}
//3.重名驗證
console.log("ajax重名校驗")
//ajax重名校驗
if ($(this).attr("ajax-vl") == "error") {
return false;
}
//1、模態框中填寫的表單數據提交給服務器進行保存
//2、發送ajax請求保存員工
$.ajax({
url: "${PATH}/saveemp",
type: "POST",
data: $("#empAddModal form").serialize(),
//.serialize()方法能將表單中數據序列化,直接發送給controll封裝成Bean
//console.log($("#empAddModal form").serialize());
//empName=Tom&email=Tom%40123.com&gender=M&dId=1
success: function (result) {
//清除模態框和提示信息
$("#empAddModal form").find("*").removeClass("has-error has-success");
$("#empAddModal form").find(".help-block").text("");
//在這里判斷后端JSR303校驗結果,最后一次!!!!!!!!!真的
//前后端驗證可以獨立運行,注釋前端后端也能實現一樣效果
if(result.code == 2333){
//alert(result.msg);
//1.添加成功,關閉模態框
$("#empAddModal").modal("hide");
//2.來到最后一頁,顯示插入的數據,可以直接跳到一個很大的頁數,因為
//合理性,所以不會超出,這里使用全局參數,數據總條數+1保證不出現極端情況
to_page(totalRecord + 1);
}else{
//失敗,顯示信息,有幾個就顯示幾個
//undefined 就是沒找到這個錯誤,說明正確,可用alert(result.extend.errorFields.empName)驗證
//用戶名格式
//alert(result.extend.errorFields.empName)
//用戶名格式和查重,因為查重的屬性格式和格式驗證不同,所以不能分開
//result.extend.errorFields.empName 格式驗證
//result.extend.empName 查重驗證
if(undefined != result.extend.errorFields ){
//格式錯誤
if(undefined != result.extend.errorFields.empName){
show_validate_msg("#empName_add_input","error",result.extend.errorFields.empName);
}
}else{
if(undefined != result.extend.empName){
//查重錯誤
show_validate_msg("#empName_add_input","error",result.extend.empName);
}
}
//郵箱格式判斷
if(undefined != result.extend.errorFields){
if(undefined != result.extend.errorFields.email){
show_validate_msg("#email_add_input","error",result.extend.errorFields.email);
}
}
}
}
});
});
//新增保存信息--請求按鈕JQuery格式總校驗方法
function validate_add_form() {
console.log("validate_add_form()")
//1.拿到校驗的數據,使用正則表達式
//根據bootstrap提供的組件
//校驗用戶名
var empName = $("#empName_add_input").val();
var regName = /(^[a-zA-Z0-9_-]{2,8}$)|(^[\u2E80-\u9FFF]{2,5})/;
if (!regName.test(empName)) {
//alert("用戶名可以是2-5位中文或者2-8位英文和數字的組合");
show_validate_msg("#empName_add_input", "error", "用戶名可以是2-5位中文或者2-8位英文和數字的組合");
return false;
} else {
show_validate_msg("#empName_add_input", "success", "");
}
//2、校驗郵箱信息
var email = $("#email_add_input").val();
var regEmail = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
if (!regEmail.test(email)) {
//alert("郵箱格式不正確");
show_validate_msg("#email_add_input", "error", "郵箱格式不正確");
return false;
} else {
show_validate_msg("#email_add_input", "success", "");
}
//最后方法通過
return true;
}
//新增保存信息--添加css樣式
//show_validate_msg顯示校驗狀態,通過添加樣式,ele表示被選擇元素,status狀態
//用來判斷是用什么樣式,綠色、紅色,msg提示信息
function show_validate_msg(ele, status, msg) {
//判斷之前先清空之前樣式
$(ele).parent().removeClass("has-success has-error");
$(ele).next("span").text("");
if ("success" == status) {
$(ele).parent().addClass("has-success");
$(ele).next("span").text(msg)
} else if ("error" == status) {
$(ele).parent().addClass("has-error");
$(ele).next("span").text(msg)
}
}
</script>
__EOF__
本文作者: 蔚然丶丶
本文鏈接: https://www.cnblogs.com/wei-ran/p/16131419.html
*請認真填寫需求信息,我們會在24小時內與您取得聯系。