删除用户的功能我们还是按照:Dao->Service->Action->页面调试这种顺序来写。
Dao:
我们使用逆向工程生成的方法就好:
SysuserMapper sysuserMapper;
sysuserMapper.deleteByPrimaryKey(userid);
Service层:
涉及到一些逻辑:
//根据用户的id来删除用户 @Override public void deleteUserByUserid(String userid) throws Exception { /* * * 只有用户存在才能删除,不然的话不能删除,所以这里有一个校验约束 * */ //校验用户是否存在 /* * 这里会很奇怪,为什么要校验用户是否存在呢,不存在也没有关系啊,大不了不删除了么, * 但是,如果删除了,也是执行了这段代码,那么页面怎么办,难道还是提示说删除用户成功吗? *这不就是出问题了吗 * * * * */ /* * 第一步;显示查询出用户。 * 第二步:判断一下是不是为空;不存在就是给出提示,及时抛出异常。用之前学的工具类去抛出异常。
如果不是空的,那就删除好了 * * * * */ Sysuser sysuser=sysuserMapper.selectByPrimaryKey(userid);//查找用户 if(sysuser==null)//如果用户不存在。就要抛出异常 { //抛出异常 ResultUtil.throwExcepion(ResultUtil.createFail(Config.MESSAGE, 212, null)); } //如果前面不抛出异常,这里就会执行删除。 sysuserMapper.deleteByPrimaryKey(userid); }
Action层:
记住这个层不要写什么业务逻辑,业务逻辑写在Serive层就好了。在Action做的就是从Service层得到数据吗,然后把数据返回给页面。
@RequestMapping("/deletesysuser") public @ResponseBody SubmitResultInfo deletesysuser(String id) throws Exception {//调用Service userService.deleteUserByUserid(id);
//调用这里就是前一篇文章说的工具类的使用,把一些操作全部封转到了这个工具类,用起来就简单方便了。
return ResultUtil.createSubmitResult(ResultUtil.createSuccess(Config.MESSAGE, 906, null)); }
最后就是调试页面了:先看要实现的效果:
点击删除之后就会被删除记录。
好了,我们来实现这个功能:
第一步:在每一条的记录后面都有一个“删除”按钮的链接。
做法:
打开queryuser.jsp页面:
在columns_v那边加上一行:
{ field : 'opt1',//之前的都是对应于json里面有的,json里面的就是对应于类里面的属性的,但是这个删除的话就没有包含在json里面,可以随便的取一个名字。 title : '删除', width : 120, formatter : function(value, row, index) {//通过此方法格式化显示内容,value表示从json中取出该单元格的值,row表示这一行的数据,是一个对象,index:行的序号 //这里无非就是要放入id么,row表示的是查询到的这一行的数据,里面肯定是有id数据的,所以直接是row.id就可以了。 return "<a href=javascript:deleteuser('"+row.id+"')>删除 </a>"; } }
然后整体代码变成:
//datagrid列定义 var columns_v = [ [ { field : 'userid',//对应json中的key,json中的key就是java对象中的属性名 title : '账号', width : 120 }, { field : 'username',//对应json中的key title : '名称 ', width : 180 }, { field : 'groupid',//对应json中的key title : '用户类型', width : 120, formatter : function(value, row, index) {//通过此方法格式化显示内容,value表示从json中取出该单元格的值,row表示这一行的数据,是一个对象,index:行的序号 if(value =='1'){ return "卫生局"; }else if(value =='2'){ return "卫生院"; }else if(value =='3'){ return "卫生室"; }else if(value =='4'){ return "供货商"; }else if(value =='0'){ return "系统管理员"; } } }, { field : 'sysmc',//对应json中的key title : '所属单位', width : 120 }, { field : 'userstate',//对应json中的key title : '状态', width : 120, formatter : function(value, row, index) {//通过此方法格式化显示内容,value表示从json中取出该单元格的值,row表示这一行的数据,是一个对象,index:行的序号 if(value =='1'){ return "正常"; }else if(value =='0'){ return "暂停"; } } }, { field : 'opt1',//之前的都是对应于json里面有的,json里面的就是对应于类里面的属性的,但是这个删除的话就没有包含在json里面,可以随便的取一个名字。 title : '删除', width : 120, formatter : function(value, row, index) {//通过此方法格式化显示内容,value表示从json中取出该单元格的值,row表示这一行的数据,是一个对象,index:行的序号 //这里无非就是要放入id么,row表示的是查询到的这一行的数据,里面肯定是有id数据的,所以直接是row.id就可以了。 return "<a href=javascript:deleteuser('"+row.id+"')>删除 </a>"; } } ] ];
这里解释一下:
formatter : function(value, row, index) {//通过此方法格式化显示内容,value表示从json中取出该单元格的值,row表示这一行的数据,是一个对象,index:行的序号 //这里无非就是要放入id么,row表示的是查询到的这一行的数据,里面肯定是有id数据的,所以直接是row.id就可以了。 return "<a href=javascript:deleteuser('"+row.id+"')>删除 </a>"; }
因为之前这个删除功能不是在json里面的数据,所以显示的内容“删除”要进行格式处理,就用到了formatter。
这里的 return "<a href=javascript:deleteuser('"+row.id+"')>删除 </a>"是一个超链接。表示调用的是javascript中的一个叫做deleteuser的方法,然后把这一行数据的id传入进去。
我们来看一下,deleteuser这个函数做了什么事。
//删除用户的方法 function deleteuser( id) { alert(id); _confirm('您确认删除吗',null,function() { $("#delete_id").val(id); //把id传进来的值赋给delete_id; jquerySubByFId("sysuserdeletefrom",userdel_callback,null,"json");//找到sysuserdeleteform这个表单,执行里面的action。返回的数据时json数据,接着去执行
//userdel_callback函数。
}); }
我们看一下:sysuserdeletefrom这个表单。
<form id="sysuserdeletefrom" action="${baseurl}user/deletesysuser.action" method="post"> <input type="hidden" id="delete_id" name="id">//前面的函数里面把id的值已经给了这个input, </form>
这里写明了action="${baseurl}user/deletesysuser.action",所以会去执行Actionc层里面的方法。
说好了表单,我们来介绍一下userdel_callback这个回调函数。
function userdel_callback(data) { message_alert(data); var type=data.resultInfo.type; if(type==1) { //成功 queryuser(); } }
处理返回回来的json数据,如果是1说明成功了。
调试运行,OK.