前端框架Easey UI(二)表格控件的查找与删除操作消息提示对话框

来源:互联网 发布:钣金放样软件 编辑:程序博客网 时间:2024/06/02 18:52

全查

将后台所有的数据传播的前台,在之前hibernate和struts整合获取到数据的基础上,只需将访问时的路径设置到表格控件的url属性中,
同时保证表格的列属性field的值与后台模型(实体类)的属性值一致即可。

    $("#dg").datagrid({            url : 'userAction!findUserWithPage',            columns : [ [ {                field : 'id',                title : '用户ID',                width : 80,                checkbox : true,                align : 'center'            }] ]        })    })

分页查询

在service写方法统计后台的数据的条数,返回值是int类型,但是调用dao层的方法返回值是Object,Object不能直接转成int类型因此先转成long再次转成int类型。

public static int getUserCount(){        Object obj=BaseDao.getObject("select count(*) from User");        long count=(Long)obj;        return (int)count;    }

该框架分页时前台有两个参数,在控制器中为接收参数定义两个integer类型的变量、并书写其set、get方法。该方法中有两个内容都要传送到前台且要转成Json格式,因此用map集合将两个参数写入,要与前台框架进行配合map的键必须是下面写的值,不能随便写。数据库的分页从0开始,前台从1开始,因此在传参时需要注意数值差。

public void findUserWithPage()throws Exception{        List<User> list=UserService.findUserWithPage((page-1)*rows, rows);        int count=UserService.getUserCount();        Map<String, Object> data=new HashMap<String,Object>();        data.put("rows", list);        data.put("total", count);        toJSON(data);       }

如果想对数据库中的值在前台显示时进行转变,例如性别在数据库中存的是0和1,想要在页面显示男女,需要在控制器中对查询出来的值依次遍历,根据值进行判断和修改,判断要写成并列的,每个判断用一条if语句。

for (User user : list) {    if ("1".equals(user.getSex())) {        user.setSex("男");    }    if ("0".equals(user.getSex())) {        user.setSex("女");    }}

条件查询

在之前的网页上点击查询按钮,可以按照输入框中的内容进行查询,为按钮添加点击事件,运用id选择器拿到表格,配置load或者reload方法(该框架的方法都是通过配置),方法的参数通过id选择器获取对应标签的值,select标签的值因用到框架的自定义组合框,不能通过val()得到其中的值,需要用该控件的getValue方法得到。

$(function() {    $("#searchBut").click(function(){        $("#dg").datagrid('reload',{            usex: $("#sex").combobox('getValue'),            userName:$("#username").val()        })})

load和reload方法区别

load param 载入并显示第一页的记录,如果传递了'param'参数,它将会覆盖查询参数属性的值。通过传递一些参数,通常做一个查询,这个方法可以被称为从服务器加载新数据。$('#dg').datagrid('load',{    code: '01',    name: 'name01'}); reload param 重载记录,跟'load'方法一样但是重载的是当前页的记录而非第一页。 

修改service层,新添加参数获取前台数据,对前台传来的数据进行判断,在数据有值时将其附加到HQL语句中。

    public static List<User>findUserWithPage(int page,int rows,String sex, String userName){        StringBuffer HQL =new StringBuffer("from User where 1=1");        if(!"".equals(sex)&&sex!=null){            HQL.append("  and   sex='"+sex+"'");        }        if(!"".equals(userName)&&userName!=null){            HQL.append("  and   username like '%"+userName+"%'");        }        return (List<User>) BaseDao.findWithPage(HQL.toString(), page, rows);    }

控制器层新建成员变量,属性名与前台方法的参数名一致,并创建其对应的set、get方法。
为什么前台数据传到后台没有乱码:strut内置的过滤器可以处理乱码问题。

删除

getSelections: none 返回所有被选择的行,当没有记录被选择时,将返回一个空数组。
为删除按钮添加事件,调用getselections方法,根据该方法返回值的长度判断有没有行被选中,没有数据时提示选择数据,为了方便查询,只传数组中的id值,循环遍历返回的数组获取拿其id值。调用getJSON第一个参数跳转到哪里,第二个参数是传给后台的值,第三个参数是一个方法,根据返回值判断是否删除成功,成功后重新刷新表格,不成功给出提示。

$("#removeBut").click(function(){            if($("#dg").datagrid('getSelections').length==0){                alert('请选择删除数据');            }            else{                var ids=[];                var array=$("#dg").datagrid('getSelections');                for(var i in array){                    ids.push(array[i].id);                }                $.getJSON("userAction!delUserInfoById",{"id[]":ids},function(flag){                    if(flag){                        alert('删除数据成功')                        $("#dg").datagrid('reload')                    }else{                        alert('删除数据失败')                    }                })            }               })

service层创建对应的方法,通过id获取到要删除的对象,在调用删除方法删除该对象。

public static boolean delUserInfo(Integer id){        User user=(User) BaseDao.getObject("from User where id="+id);        try {            BaseDao.deleteObj(user);            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }           }

控制器层,数组不能通过模型装配装,也不能通过list集合,因此用getRequest().getParameterValues("id[]");获取,参数是前台传参时的参数名称,
循环获取到的参数,并将参数转换为integer类型来调用service层的方法。

public void delUserInfoById() throws Exception{        boolean flag=false;        String ids[]=getRequest().getParameterValues("id[]");        if(ids.length>0){            for (String string : ids) {                flag=UserService.delUserInfo(Integer.parseInt(string));            }        }        toJSON(flag);    }

消息提示对话框

在帮助文档中窗口的消息窗体中可以找到,都是方法,在自己需要的地方直接拿去用,如在删除成功后显示,如何书写本文不做讲述,自己去帮助文档中查询即可。

在是否确认删除是,运用确认对话框,当在弹出的对话框中选择取消时,选中的内容需要回滚,不调用后台完成该功能,需要用表格的unselectAll方法将选择的行取消。
unselectAll none 取消选择所有页面的行

$.messager.confirm('删除确认', '是否确认删除', function(r){                    if (r){                        $.getJSON("userAction!delUserInfoById", {                            "id[]" : ids                        }, function(flag) {                            if (flag) {                                alert('删除数据成功')                                $.messager.show({                                    title : '消息提示',                                    msg : '删除成功',                                    timeout : 5000,                                    showType : 'slide'                                });                                $("#dg").datagrid('reload')                            } else {                                alert('删除数据失败')                            }                        })                    }else                        {                        $("#dg").datagrid('unselectAll');                        }                });
阅读全文
0 0