SSM框架中前端页面(AJAX+Jquery+spring mvc+bootstrap)

SSM框架中前端页面(AJAX+Jquery+spring mvc+bootstrap)

      前端新增页面的模态框,采用bootstarp建立。定义了empName,email,gender,depatName,四个属性的ID;其中保存按钮的ID:emp_save_btn,对应的点击函数如下: 

 

$("#emp_save_btn").click(function() {
            //1.模态框的表单数据提交给服务器进行保存
            //先对要提交给服务器的数据进行校验
            if (!validate_add_form()) {
                  return false;
            };
            //判断用户名是否成功
            if ($(this).attr("ajax-va") == "error") {
                return false;
            }
            //2.发送ajax请求保存员工,serialize表示序列化方法,将填入数据序列化
            //$("#empAddmodal form").serialize();
            //添加数据后,跳转到最后一页
            $.ajax({
                url : "${APP_PATH}/emp",
                type : "POST",
                data : $("#empAddmodal form").serialize(),
                success : function(result) {
                    //alert(result.msg);
                    //当员工保存工作
                    //1.关闭模态框
                    $("#empAddmodal").modal('hide');
                    //2.来到最后一页,显示刚才保存的数据
                    //发送ajax请求显示最后一页数据即可,总记录数肯定大于页数
                    to_page(totalRecord);
                }
            });

        });
View Code

        步骤是 模态框的表单数据提交给服务器进行保存,所以先对要提交给服务器的数据进行校验,采用方法为validate_add_form(),然后判断用户名是否已经存在。

调用ajax方法,发出emp请求(转到controller层),POST方式,将填入的数据序列化,成功就保存数据,跳转到最后一页显示添加的数据

       validate_add_form方法先拿到要检验的数据采用正则表达式确定是否符合输入要求,如果符合要求,调用show_validate_msg方法,代码如下:

 
    

//校验表单数据

function validate_add_form() {
//1.拿到要校验的数据,使用正则表达式
var empName = $("#empName_add").val();
var regName = /(^[a-zA-Z0-9_-]{6,16}$)|(^[\u2E80-\u9fff]{2,5})/;
if (!regName.test(empName)) {
//alert("用户名可以是2-5位中文或者6-16位英文和数字的组合");
//bootstrap校验,给父标签加上has-error
// $(ele).parent().addClass("has-error");
// $(ele).next("span").text(msg);
show_validate_msg("#empName_add","error","用户名可以是2-5位中文或者6-16位英文和数字的组合");

 
    


return flase;
}else{

 
    

show_validate_msg("#empName_add","success","");

}

 

 

       show_validate_msg,有三个参数,第一个为标签ID,第二个为状态,第三个显示文本。

 1 //显示校验结果的提示信息,抽象成方法
 2         function show_validate_msg(ele,status,msg){
 3             //清除当前元素的校验状态
 4              $(ele).parent().removeClass("has-success has-error");
 5              $(ele).next("span").text("");
 6              
 7             if("success"==status)
 8             {
 9                  $(ele).parent().addClass("has-success");
10                  $(ele).next("span").text(msg);
11             }else if("error"==status)
12             {
13                  $(ele).parent().addClass("has-error");
14                  $(ele).next("span").text(msg);
15             }
16         }
17         

    注意的几个细节:

1.采用函数插入页面元素

1     $("<tr></tr>").append(empIdTd).append(empNameTd).append(
2                         GenderTd).append(EmailTd).append(deptNameTd).append(
3                         btnTd).appendTo("#emps_table tbody");

2.append方法执行完以后还是返回原来的元素

3.采用Response获得json字符串,然后页面解析字符串

4.跳转页面采用to_page方法,里面依次执行三个方法,解析并显示员工数据,解析并显示分页信息,显示分页信息

5.返回的json字符串

6.前端页面的ajax发出请求,controller收到请求,并得到参数,转到service层的方法,service层调用mapper.java中的方法。该方法是mapper,.xml的声明,是现在mapper.xml里。

 

      完整页面如下:

  1 <%@ page language="java" contentType="text/html; charset=UTF-8"
  2     pageEncoding="UTF-8"%>
  3 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5 <html>
  6 <head>
  7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8 <title>员工列表</title>
  9 <%
 10     pageContext.setAttribute("APP_PATH", request.getContextPath());
 11 %>
 12 <!-- web路径,
 13 不以/开始的相对路径,找资源,以当前资源的路径为基准
 14 以/开始的相对路径,找资源,以服务器的路径为标准 
 15 src一般为http://localhost:3306/xiaofan,(项目名)
 16 -->
 17 
 18 
 19 <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
 20 
 21 <%--  <script type="text/javascript" src="${APP_PATH}/static/js/jquery.min.js"></script> --%>
 22 <link
 23     href="${APP_PATH}/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"
 24     rel="stylesheet">
 25 <script src="static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
 26 </head>
 27 
 28 <!-- 员工添加的模态框-->
 29 
 30 <!-- Modal -->
 31 <div class="modal fade" id="empAddmodal" tabindex="-1" role="dialog"
 32     aria-labelledby="myModalLabel">
 33     <div class="modal-dialog" role="document">
 34         <div class="modal-content">
 35             <div class="modal-header">
 36                 <button type="button" class="close" data-dismiss="modal"
 37                     aria-label="Close">
 38                     <span aria-hidden="true">&times;</span>
 39                 </button>
 40                 <h4 class="modal-title" id="myModalLabel">添加员工</h4>
 41             </div>
 42             <div class="modal-body">
 43 
 44                 <!-- 弹窗提示框显示的页面开始,Spring自动封装form提交对象,要求name和Bean中名字一样 -->
 45                 <form class="form-horizontal">
 46                 
 47                     <div class="form-group">
 48                         <label class="col-sm-2 control-label">empName</label>
 49                         <div class="col-sm-10">
 50                             <input type="text" class="form-control" id="empName_add"
 51                                 placeholder="empName" name="workerName">
 52                         <span  class="help-block"></span>
 53                         </div>
 54                     </div>
 55 
 56                     <div class="form-group">
 57                         <label class="col-sm-2 control-label">email</label>
 58                         <div class="col-sm-10">
 59                             <input type="text" class="form-control" id="email_add"
 60                                 placeholder="email" name="workerEmail">
 61                             <span  class="help-block"></span>
 62                         </div>
 63                     </div>
 64 
 65                     <div class="form-group">
 66                         <label class="col-sm-2 control-label">gender</label>
 67                         <div class="col-sm-10">
 68                             <label class="radio-inline"> <input type="radio"
 69                             id="gender1_add" value="M" name="workerGender">
 70  71                             </label> <label class="radio-inline"> <input type="radio"
 72                              id="gender2_add" value="W" name="workerGender">
 73  74                             </label>
 75                           </div>
 76                     </div>
 77 
 78                     <div class="form-group">
 79                         <label class="col-sm-2 control-label">deptName</label>
 80                         <div class="col-sm-10">
 81                         <!-- 部门提交ID ,可以通过ID,也可以通过modal寻找-->
 82                             <select class="form-control" name="dId" "> 
 83                             
 84                             </select>
 85                         </div>
 86                     </div>
 87 
 88                     
 89                 </form>
 90             </div>
 91             <!-- 弹窗提示框显示的页面结束 -->
 92 
 93             <div class="modal-footer">
 94                 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
 95                 <button type="button" class="btn btn-primary" id="emp_save_btn">保存</button>
 96             </div>
 97         </div>
 98     </div>
 99 </div>
100 
101 
102 <body font-size="12px">
103 
104     <!-- 搭建显示页面 -->
105     <div class="container">
106         <!-- 标题 -->
107         <div class="row">
108             <div class="col-md-12">
109                 <h1>SSM-CRUD</h1>
110             </div>
111         </div>
112         <!-- 按钮 -->
113         <div class="row">
114             <div class="col-md-4 col-md-offset-8">
115                 <button class="btn btn-primary" id="emp_add_modal_bn">新增</button>
116                 <button class="btn btn-danger">删除</button>
117             </div>
118         </div>
119         <!-- 显示表格信息 -->
120         <div class="row">
121             <div class="col-md-12">
122                 <table class="table table-hover" id="emps_table">
123                     <thead>
124                         <tr>
125                             <th>序号</th>
126                             <th>Name</th>
127                             <th>Gender</th>
128                             <th>Email</th>
129                             <th>deptName</th>
130                             <th>操作</th>
131                         </tr>
132                     </thead>
133                     <tbody>
134                     </tbody>
135 
136 
137                 </table>
138             </div>
139         </div>
140         <!-- 显示分页信息-->
141         <div class="row">
142             <!-- 分页文字信息,6列-->
143             <div class="col-md-6" id="page_info_area"></div>
144             <!-- 分页条信息-->
145             <div class="col-md-6" id="page_nav_area"></div>
146         </div>
147 
148     </div>
149     
150     <script type="text/javascript">
151     
152      var totalRecord;
153         //页面加载完成以后,发送一个ajax请求,得到分页数据
154         $(function() {
155             //去首页
156             to_page(1);
157         });
158         
159         function to_page(pn) {
160             $.ajax({
161                 url : "${APP_PATH}/emps",
162                 data : "pn=" + pn,
163                 type : "GET",
164                 success : function(result) {
165                     //console.log(result);
166                     //1.解析并显示员工数据
167                     build_workers_table(result);
168 
169                     //2.解析并显示分页信息
170                     build_page_info(result);
171                     //3.显示分页条信息
172                     build_page_nav(result);
173 
174                 }
175             });
176 
177         }
178         //1.解析并显示员工数据
179         function build_workers_table(result) {
180             //清空表格数据
181             $("#emps_table tbody").empty();
182             var emps = result.extend.pageInfo.list;
183             //jquery遍历方法each,emps第一个遍历的元素,item当前对象
184             $.each(emps, function(index, item) {
185                 var empIdTd = $("<td></td>").append(item.workerId);
186                 var empNameTd = $("<td></td>").append(item.workerName);
187                 var GenderTd = $("<td></td>").append(item.workerGender == 'M' ? "" : "");
188                 var EmailTd = $("<td></td>").append(item.workerEmail);
189                 var deptNameTd = $("<td></td>").append(item.department.deptName);
190                 var editBtn = $("<button></button>").addClass(
191                         "btn btn-primary  btn-sm").append(
192                         $("<span></span>").addClass(
193                                 "glyphicon glyphicon-pencil")).append("编辑");
194                 var delBth = $("<button></button>").addClass(
195                         "btn btn-danger  btn-sm").append(
196                         $("<span></span>")
197                                 .addClass("glyphicon glyphicon-trash")).append(
198                         "删除");
199                 var btnTd = $("<td></td>").append(editBtn).append(" ").append(
200                         delBth);
201                 //append方法执行完以后还是返回原来的元素
202                 $("<tr></tr>").append(empIdTd).append(empNameTd).append(
203                         GenderTd).append(EmailTd).append(deptNameTd).append(
204                         btnTd).appendTo("#emps_table tbody");
205                 /* <button class="btn btn-primary  btn-sm">
206                 <span class="glyphicon glyphicon-pencil " aria-hidden="true"></span>
207                 编辑
208                 </button> */
209 
210             });
211 
212         }
213 
214         //2.解析并显示分页信息,列出
215         function build_page_info(result) {
216             $("#page_info_area").empty();
217             $("#page_info_area").append(
218                     "当前" + result.extend.pageInfo.pageNum + "页,总"
219                             + result.extend.pageInfo.pages + "页 ,总"
220                             + result.extend.pageInfo.total + "条记录");
221             totalRecord=result.extend.pageInfo.total;
222         }
223         //3.显示分页条信息,点击跳转下一页
224         /*     <!-- 分页条信息-->
225                 <div class="col-md-6">
226                     <nav aria-label="Page navigation">
227                     <ul class="pagination">
228                 <li><a href="${APP_PATH }/emps?pn=1">首页</a></li>
229              <li><a href="${APP_PATH }/emps?pn=${pageInfo.pageNum-1}"
230         aria-label="Previous"> <span aria-hidden="true">&laquo;</span>
231                             </a></li>
232          */
233         function build_page_nav(result) {
234             //page_nav_area
235             $("#page_nav_area").empty();
236             var ul = $("<ul></ul>").addClass("pagination");
237 
238             //构建元素
239             var firstPageli = $("<li></li>").append(
240                     $("<a></a>").append("首页").attr("href", "#"));
241             var prePageli = $("<li></li>").append(
242                     $("<a></a>").append("&laquo;"));
243             if (result.extend.pageInfo.hasPreviousPage == false) {
244                 firstPageli.addClass("disabled");
245                 prePageli.addClass("disabled");
246             } else {
247                 //为元素添加点击事件
248                 firstPageli.click(function() {
249 
250                     to_page(1);
251 
252                 });
253                 prePageli.click(function() {
254                     //当前页面减一
255                     to_page(result.extend.pageInfo.pageNum - 1);
256 
257                 });
258 
259             }
260 
261             var nextPageli = $("<li></li>").append(
262                     $("<a></a>").append("&raquo;"));
263             var lastPageli = $("<li></li>").append(
264                     $("<a></a>").append("末页").attr("href", "#"));
265             if (result.extend.pageInfo.hasNextPage == false) {
266                 nextPageli.addClass("disabled");
267                 lastPageli.addClass("disabled");
268             } else {
269                 nextPageli.click(function() {
270                     //当前页面减一
271                     to_page(result.extend.pageInfo.pageNum + 1);
272 
273                 });
274                 lastPageli.click(function() {
275                     //当前页面减一
276                     to_page(result.extend.pageInfo.pages);
277 
278                 });
279 
280             }
281 
282             //添加首页和前一页的提示
283             ul.append(firstPageli).append(prePageli);
284             //遍历页码号1,2,3
285             $.each(result.extend.pageInfo.navigatepageNums, function(index,
286                     item) {
287                 var numLi = $("<li></li>").append($("<a></a>").append(item));
288                 if (result.extend.pageInfo.pageNum == item) {
289                     numLi.addClass("active");
290                 }
291                 numLi.click(function() {
292 
293                     to_page(item);
294                 });
295                 ul.append(numLi);
296             });
297             //添加下一页和末页的提示
298             ul.append(nextPageli).append(lastPageli);
299             //把url加入
300             var navEle = $("<nav></nav>").append(ul);
301             navEle.appendTo("#page_nav_area");
302         }
303          
304          //点击新增按钮弹出模态框
305         $("#emp_add_modal_bn").click(function() {
306             //清空表单数据(表单重置),取出form对象
307             $("#empAddmodal form")[0].reset();
308             //发送ajax请求,查出部门信息,显示在下拉列表中
309             getDepts();
310             //打开模态框,$("#id").modal
311             $("#empAddmodal").modal({
312                 backdrop : "static"
313             });
314 
315         });
316          //查出所有的部门信息并显示在下拉列表中
317         
318         function getDepts() {
319             $.ajax({
320                 url : "${APP_PATH}/depts",
321                 type : "GET",
322                 success : function(result) {
323                   $.each(result.extend.depts,function() {
324                         var optionEle = $("<option></option>").append(
325                                 this.deptName).attr("value", this.deptId);
326                         optionEle.appendTo("#empAddmodal select");
327                     });
328 
329                 }
330             });
331         }
332          
333         //校验表单数据
334         
335         function validate_add_form() {
336             //1.拿到要校验的数据,使用正则表达式
337             var empName = $("#empName_add").val();
338             var regName = /(^[a-zA-Z0-9_-]{6,16}$)|(^[\u2E80-\u9fff]{2,5})/;
339             if (!regName.test(empName)) {
340                 //alert("用户名可以是2-5位中文或者6-16位英文和数字的组合");
341                 //bootstrap校验,给父标签加上has-error
342                 //    $(ele).parent().addClass("has-error");
343                 //  $(ele).next("span").text(msg);
344                 show_validate_msg("#empName_add","error","用户名可以是2-5位中文或者6-16位英文和数字的组合");
345 
346             
347                 return flase;
348             }else{
349 
350                  show_validate_msg("#empName_add","success","");
351             
352             }
353             //2.检验邮箱
354             
355             var email = $("#email_add").val();
356             var regemail = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9][email protected]([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
357             if (!regemail.test(email)) {
358                 //alert("邮箱格式不正确");
359                 //应该清空这个元素之前的样式
360                 //$("#email_add").parent().addClass("has-error");
361                 //$("#email_add").next("span").text("邮箱格式不正确");
362                  show_validate_msg("#email_add","error","邮箱格式不正确");
363                 return flase;
364             } else {
365                 //$("#email_add").parent().addClass("has-success");
366                 //$("#empName_add").next("span").text("邮箱格式不正确");
367     
368                 show_validate_msg("#email_add","success","");
369             }
370             return true;
371         }
372         
373         //显示校验结果的提示信息,抽象成方法
374         function show_validate_msg(ele,status,msg){
375             //清除当前元素的校验状态
376              $(ele).parent().removeClass("has-success has-error");
377              $(ele).next("span").text("");
378              
379             if("success"==status)
380             {
381                  $(ele).parent().addClass("has-success");
382                  $(ele).next("span").text(msg);
383             }else if("error"==status)
384             {
385                  $(ele).parent().addClass("has-error");
386                  $(ele).next("span").text(msg);
387             }
388         }
389         
390         $("#empName_add").change(function(){
391             //发送ajax请求检验用户名是否可用
392             var empName=this.value;
393             $.ajax({
394                 url:"${APP_PATH}/checkuser",
395                 data:"empName="+empName,
396                 type:"POST",
397                 success:function(result){
398                     if(result.code==100)
399                     {//result为MSG
400                         show_validate_msg("#empName_add","success","用户名可用");
401                         $("#emp_save_btn").attr("ajax-va","success");
402                     }
403                     else{
404                         show_validate_msg("#empName_add","error","用户名不可用");
405                         $("#emp_save_btn").attr("ajax-va","error");
406                     }
407                 }
408             });
409             
410         });
411         
412         //点击保存,保存员工
413         
414         $("#emp_save_btn").click(function() {
415             //1.模态框的表单数据提交给服务器进行保存
416             //先对要提交给服务器的数据进行校验
417             if (!validate_add_form()) {
418                   return false;
419             };
420             //判断用户名是否成功
421             if ($(this).attr("ajax-va") == "error") {
422                 return false;
423             }
424             //2.发送ajax请求保存员工,serialize表示序列化方法,将填入数据序列化
425             //$("#empAddmodal form").serialize();
426             //添加数据后,跳转到最后一页
427             $.ajax({
428                 url : "${APP_PATH}/emp",
429                 type : "POST",
430                 data : $("#empAddmodal form").serialize(),
431                 success : function(result) {
432                     //alert(result.msg);
433                     //当员工保存工作
434                     //1.关闭模态框
435                     $("#empAddmodal").modal('hide');
436                     //2.来到最后一页,显示刚才保存的数据
437                     //发送ajax请求显示最后一页数据即可,总记录数肯定大于页数
438                     to_page(totalRecord);
439                 }
440             });
441 
442         });
443     </script>
444 </body>
445 </html>
View Code

 

posted on 2018-04-05 22:53 zhangdazhuang 阅读(...) 评论(...) 编辑 收藏