本文共 8266 字,大约阅读时间需要 27 分钟。
本节书摘来自华章出版社《深入实践Spring Boot》一书中的第3章,第3.4节,作者陈韶健,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
视图设计包括列表视图、新建视图、查看视图、修改视图和删除视图设计等5个方面有关数据的增删查改的内容。
我们知道,视图上的数据存取不是直接与模型打交道,而是通过控制器来处理。在视图中对于控制器的请求,大多使用jQuery的方式来实现。jQuery是一个优秀的JavaScript程序库,并且具有很好的兼容性,几乎兼容了现有的所有浏览器。下面的视图设计将以电影的视图设计为例说明,演员的视图设计与此类似,不再赘述。电影的列表视图是电影视图的主页,它引用了3.3节使用Thymeleaf设计的页面框架模板layout.html,在这里主要实现对数据的分页查询请求和列表数据显示,并提供了一部电影的新建、查看、修改和删除等超链接。
1.?分页设计电影的列表视图的分页设计使用了“jquery.pagination.js”分页插件,编写如代码清单3-15所示的脚本,其中getOpt定义了分页工具条的一些基本属性,pageaction通过“./list”调用控制器取得分页数据列表,f?illData函数将列表数据填充到HTML控件tbodyContent中。代码清单3-15 分页设计的js编码// 分页的参数设置var getOpt = function(){ var opt = { items_per_page: 10, // 每页记录数 num_display_entries: 3, // 中间显示的页数,默认为10 current_page:0, // 当前页 num_edge_entries:1, // 头尾显示的页数,默认为0 link_to:"javascript:void(0)", prev_text:"上页", next_text:"下页", load_first_page:true, show_total_info:true , show_first_last:true, first_text:"首页", last_text:"尾页", hasSelect:false, callback: pageselectCallback // 回调函数 } return opt;}// 分页开始var currentPageData = null ;var pageaction = function(){ $.get('./list?t='+new Date().getTime(),{ name:$("#name").val() },function(data){ currentPageData = data.content; $(".pagination").pagination(data.totalElements, getOpt()); });}var pageselectCallback = function(page_index, jq, size){ if(currentPageData!=null){ fillData(currentPageData); currentPageData = null; }else $.get('./list?t='+new Date().getTime(),{ size:size,page:page_index,name:$("#name").val() },function(data){ fillData(data.content); });}// 填充分页数据function fillData(data){ var $list = $('#tbodyContent').empty(); $.each(data,function(k,v){ var html = "" ; html += ' ' + ''+ (v.id==null?'':v.id) +'' + ''+ (v.name==null?'':v.name) +'' + ''+ (v.createDate==null?'': getSmpFormatDateByLong(v.createDate,true)) +'' ; html += '查看修改删除' ; html +='' ; $list.append($(html)); });}// 分页结束
2.?列表页面设计
电影列表的显示页面主要定义了列表字段的名称和提供显示数据内容的控件ID,即tbodyContent,如代码清单3-16所示。代码清单3-16 电影列表页面HTML编码电影管理 当前位置:首页 > 电影管理
ID 电影 出版日期 操作
3.?列表视图设计效果
电影数据列表视图设计的最终显示效果如图3-2所示。1.?新建对话框设计
新建电影时,在电影主页中打开一个对话框显示新建的操作界面,对话框设计引用了“artDialog.js”的对话框插件,然后编写一个脚本来打开对话框,如代码清单3-17所示。其中“./new”是连接控制器的请求URL,注意这里使用了相对路径,这个URL通过“$.get”请求返回新建电影的HTML页面,请求链接中的ts参数传递的是当前时间,这是为了保证该链接是一个全新的链接,以使浏览器能显示一个最新的内容页面。代码清单3-17 新建电影对话框设计js编码function create(){ $.get("./new",{ts:new Date().getTime()},function(data){ art.dialog({ lock:true, opacity:0.3, title: "新增", width:'750px', height: 'auto', left: '50%', top: '50%', content:data, esc: true, init: function(){ artdialog = this; }, close: function(){ artdialog = null; } }); });}
2.?新建页面设计
新建电影的页面设计,如代码清单3-18所示,这里只是部分HTML编码,其中的日期控件使用“WdatePicker.js”插件来实现。对于一部电影来说,我们需要输入名称、剧照和日期三个属性,其中剧照的图片下拉列表框使用“imageselect.js”图片下拉列表框插件来实现,并且为了简化设计,剧照中的图片文件使用了预先定义的文件,这里只要选择使用哪一个图片即可。代码清单3-18 新建电影页面HTML编码3.?表单验证与提交设计
验证新建电影表单的提交时使用“jquery.validate.min.js”插件中的验证方法来实现,如代码清单3-19所示。保存时调用经典的“$.ajax”方式利用POST方法进行提交,其中headers: {"Content-type": "application/x-www-form-urlencoded;charset=UTF-8"}用于保证数据在传输过程中中文字符的正确性。在表单验证中,只对name和createDate两个属性进行简单的非空验证,表单的参数传递使用一个表单序列化函数serialize()来实现,它将表单控件上的对象序列化为一个个含有“键-值”对的字符串进行提交。代码清单3-19 新建电影中表单验证和提交的js编码$(function(){ $('#saveForm').validate({ rules: { name :{required:true}, createDate :{required:true} },messages:{ name :{required:"必填"}, createDate :{required:"必填"} } }); $('.saveBtn').click(function(){ if($('#saveForm').valid()){ $.ajax({ type: "POST", url: "./save", data: $("#saveForm").serialize(), headers: {"Content-type": "application/x-www-form-urlencoded;charset=UTF-8"}, success: function (data) { if (data == 1) { alert("保存成功"); pageaction(); closeDialog(); } else { alert(data); } }, error:function(data){ var e; $.each(data,function(v){ e += v + " "; }); alert(e); } }); }else{ alert('数据验证失败,请检查!'); } });});
4.?新建视图设计效果
新建电影的视图设计最后的显示效果如图3-3所示。1.?查看对话框设计
在电影的主页中单击一部电影的查看链接,将打开一个查看电影的对话框,对话框的设计如代码清单3-20所示,其中“./{id}”是提取数据的链接,它将向控制器请求数据,并以HTML页面方式显示出来。代码清单3-20 查看电影对话框js编码function detail(id){ $.get("./"+id,{ts:new Date().getTime()},function(data){ art.dialog({ lock:true, opacity:0.3, title: "查看信息", width:'750px', height: 'auto', left: '50%', top: '50%', content:data, esc: true, init: function(){ artdialog = this; }, close: function(){ artdialog = null; } }); });}
2.?查看页面设计
电影查看页面的设计,即将数据展示出来的HTML编码,如代码清单3-21所示,需要注意的是,日期数据需要进行格式化,而演员表则使用Thymeleaf中的一个“th:each”循环语句来输出。代码清单3-21 电影查看页面HTML编码3.?查看视图的设计效果
电影查看视图设计最终完成的效果如图3-4所示。1.?修改对话框设计
在电影的主页中修改一部电影,首先打开一个修改电影的对话框,这个对话框的设计如代码清单3-22所示。其中通过“$.get”访问“./edit/{id}”取得数据和修改视图的HTML页面元素。代码清单3-22 修改电影对话框js编码function edit(id){ $.get("./edit/"+id,{ts:new Date().getTime()},function(data){ art.dialog({ lock:true, opacity:0.3, title: "修改", width:'750px', height: 'auto', left: '50%', top: '50%', content:data, esc: true, init: function(){ artdialog = this; }, close: function(){ artdialog = null; } }); });}
2.?修改页面设计
修改电影视图的页面设计如代码清单3-23所示,其中剧照的下拉列表框中增加了“选中”的代码:th:selected="${movie.photo == f?ile}",即如果电影中的剧照与下拉框列表中的剧照相同,则选中它。在修改界面上,还增加了“增加角色”和“选择演员”的编辑项。为了简化设计这里的角色名称我们也使用了预先定义的数据。代码清单3-23 修改电影页面HTML编码1.?删除确认对话框
如果有删除的操作,首先要给出确认提示框,只有用户单击确定后才能删除数据,否则将不做任何操作。确认提示框是调用了Windows中的确认对话框,如代码清单3-24所示。代码清单3-24 删除确认对话框js编码function del(id){ if(!confirm("您确定删除此记录吗?")){ return false; } $.get("./delete/"+id,{ts:new Date().getTime()},function(data){ if(data==1){ alert("删除成功"); pageaction(); }else{ alert(data); } });}
2.?删除确认设计效果
执行删除操作的确认效果如图3-6所示。转载地址:http://dbqta.baihongyu.com/