[SSH_easyUI]细节3:dataGrid区域实现增删改查
来源:互联网 发布:mac 系统恢复 编辑:程序博客网 时间:2024/06/05 18:15
1. userManag.jsp
EasyUI
实现dataGrid
的jsp页面,在这里通过easyUI包装后的js代码实现与后台数据的交互和前台样式的自定义。
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%><script type="text/javascript"> $(function() { $('#admin_userManag_datagrid').datagrid({ url : '${pageContext.request.contextPath}/userAction!datagrid.action', fit : true, //随外面自动缩放 fitColumns : true,//当列很少的时候,能让列自动填充所有区域 border : false, pagination : true, idField : 'id',//★确定/获取所有选中项(跨页选中) rownumbers : true,//该属性会使得dataGrid渲染的时间会加长,不推荐使用(IE6),且显示区间不能扩大 sortName : 'name',//要排序的字段,是Field的值,默认升序排序 sortOrder : 'asc',//确定排序方式,不写默认升序 pageSize : 10, pageList : [ 5, 10, 20, 30, 40, 50 ],//pageSize和pageList两个属性必须同时设置,且pageSize的值应该在pageList的数组里面 //pagePosition:'both',//如果不写,则默认显示在下面 //确定翻页用的toolbar缩放位置 checkOnSelect : false,//点击行的时候,前面复选框是否选中 selectOnCheck : false,//点击前面复选框的时候是否选中一行 frozenColumns : [ [ {//★★冻结列 field : 'id', title : '编号', width : 150,//如果不给宽度,则自动计算宽度,在渲染页面的时候将延长时间(很明显),建议所有列给定宽度 //hidden : true,//隐藏列 checkbox : true }, { field : 'name', title : '登录名', width : 150, sortable : true //★点击表列头,实现排序方式转换 } ] ], columns : [ [ {//普通列 field : 'pwd', title : '密码', width : 150, align : 'right', formatter : function(value, index, row) {//★鼠标放上面,内容看全 return "**********";/*'<span title="'+value+'">' + value + '</span>'*/ } }, { field : 'creatTime', title : '创建时间', width : 150, sortable : true //点击表列头,实现排序方式转换 }, { field : 'endTime', title : '修改时间', width : 150, sortable : true //点击表列头,实现排序方式转换 } ] ], /*toolbar : [ {//这是第一种方式,中括号里面每一项都是一个button text : '查询', iconCls : 'icon-search', handler : function() {//按钮点击触发事件 } }, '-', {//'-'表示两个按钮之间的分隔形式 text : '增加', iconCls : 'icon-search' } ]*/ //toolbar : '#admin_userManag_toolbar'//第二种方式 toolbar : [ { text : '增加', iconCls : 'icon-add', handler : function() { append(); } }, '-', { text : '删除', iconCls : 'icon-remove', handler : function() { remove(); } }, '-', { text : '编辑', iconCls : 'icon-edit', handler : function() { editFun(); } }, '-' ] }); }); function editFun() { var rows = $('#admin_userManag_datagrid').datagrid('getChecked'); //得到rows是数组 if (rows.length == 1) { var d = $('<div/>').dialog({ width : 280, height : 210, href : '${pageContext.request.contextPath}/admin/userManagEdit.jsp',//将目标页面载入进来 modal : true, title : '编辑用户', buttons : [ { text : '编辑', handler : function() {//点击编辑是触发的事件 // ★★用ajax方式和提交form表单的形式都是可以的 $('#admin_userManagEdit_Form').form('submit', { url : '${pageContext.request.contextPath}/userAction!edit.action', success : function(data) { var obj = jQuery.parseJSON(data); if (obj.success) { //d.dialog('close');///▲▲▲为什么放到这里,后面的所有内容都不再执行 //$('#admin_userManag_datagrid').datagrid('reload'); $('#admin_userManag_datagrid').datagrid('updateRow', { index : $('#admin_userManag_datagrid').datagrid('getRowIndex', rows[0].id), row : obj.obj }); d.dialog('close');//▲▲为什么关闭修改对话框必须放到之后,这里有问题。能成功,但是js报错 } $.messager.show({ title : '提示', msg : obj.msg }); } }); } } ], //★★动态加载dialog,则应该在最后写一个closed的事件,否则随着点击次数增加,dom结点变得越来越多【节点内存溢出】 onClose : function() { $(this).dialog('destory');//点击关闭按钮删除相关结点 }, onLoad : function() {//★★在打开dialog的时候回显数据,这里不能用onOpen事件 //最笨的方法:逐个实现回显 /* $('#admin_userManagEdit_Form input[name=id]').val(rows[0].id); $('#admin_userManagEdit_Form input[name=name]').val(rows[0].name); $('#admin_userManagEdit_Form input[name=pwd]').val(rows[0].pwd); $('#admin_userManagEdit_Form input[name=creatTime]').val(rows[0].creatTime); $('#admin_userManagEdit_Form input[name=endTime]').val(rows[0].endTime); */ $('#admin_userManagEdit_Form').form('load', rows[0]);//★等同于上面的多项 } }); } else { $.messager.alert('提示', '请选择一项数据'); } } function searchFun() { /* $('#admin_userManag_datagrid').datagrid('load', { name : $('#admin_userManag_layout input[name=name]').val() });*/ //这样处理多个条件的模糊查询:对应后台要扩展:addWhereCond() $('#admin_userManag_datagrid').datagrid('load', serializeObject($('#admin_userManag_searchForm'))); } function clearFun() { $('#admin_userManag_layout input[name=name]').val(''); $('#admin_userManag_datagrid').datagrid('load', {});//清空就是什么都不往后台传 } function append() { $('#admin_userManag_addForm input').val('');//清空 $('#admin_userManag_addDialog').dialog('open'); } function remove() { //利用好getChecked和getSelect的意义 var rows = $('#admin_userManag_datagrid').datagrid('getChecked'); //var rows = $('#admin_yhgl_datagrid').datagrid('getSelected'); //var rows = $('#admin_yhgl_datagrid').datagrid('getSelections'); var ids = []; if (rows.length > 0) { $.messager.confirm('确认', '您是否要删除当前选中的项目?', function(r) { if (r) { for ( var i = 0; i < rows.length; i++) { ids.push(rows[i].id); } $.ajax({ url : '${pageContext.request.contextPath}/userAction!remove.action', data : { ids : ids.join(',') }, dataType : 'json', success : function(r) { //★load:使当前页变为1;reload:记住当前页。删除后不要执行reload $('#admin_userManag_datagrid').datagrid('load'); $('#admin_userManag_datagrid').datagrid('unselectAll'); $.messager.show({ title : '提示', msg : r.msg }); } }); } }); } else { $.messager.show({ title : '提示', msg : '请勾选要删除的记录!' }); } }</script><div id="admin_userManag_layout" class="easyui-layout" data-options="fit:true,border:false"> <div data-options="region:'north',title:'查询条件',border:false" style="height:65px;"> <form id="admin_userManag_searchForm"> 检索用户名称(登录名):<input name="name" /> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search',plain:true" onclick="searchFun();">查询</a> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-cancel',plain:true" onclick="clearFun();">清空</a> </form> </div> <div data-options="region:'center',border:false"> <table id="admin_userManag_datagrid"></table> </div> <!-- toolbar实现部分 <div id="admin_userManag_toolbar"> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-edit',plain:true" style="float:left;">编辑</a> <div class="datagrid-btn-separator"></div> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-help',plain:true">帮助</a> </div> --></div><!-- 功能特点: 1. 点击增加按钮的时候模式化弹出窗口 2. 在填写信息后,点击"添加"后要提交表单 3. 表单数据有些是不能填写的(设置为readonly),表单提交进行验证 4. 添加完数据后要对datagrid刷新(reload)->easyUI的不刷新添加数据,否则toolbar区域的总数据条数不会发生变化 5. 第二次添加时,数据框中没有数据 6. 中文问题:所有的文件为UTF-8+★★[form]method="post"+struts字符拦截器+web.xml中的字符编码 属性说明: closed:true:表示最初打开面板时该Dialog关闭,用到时才打开 modal:true:表示模式化打开窗口 --><div id="admin_userManag_addDialog" class="easyui-dialog" data-options="closed:true,modal:true,title:'添加用户', buttons:[{ text : '增加', iconCls : 'icon-add', handler : function() { $('#admin_userManag_addForm').form('submit',{ url:'${pageContext.request.contextPath}/userAction!addUser.action', success:function(data){ var obj=jQuery.parseJSON(data); console.info(obj); if(obj.success){ //★★刷新整个datagrid效率不高,用appendRow和insertRow代替 //$('#admin_userManag_datagrid').datagrid('load'); //加载datagrid的最后 一行 //$('#admin_userManag_datagrid').datagrid('appendRow',obj.obj); //★推荐用这种方式 $('#admin_userManag_datagrid').datagrid('insertRow',{ index:0, row:obj.obj }); $('#admin_userManag_addDialog').dialog('close'); } $.messager.show({ title:'提示', msg:obj.msg }) }}); } }]" style="width:280px;height:210px;" align="center"> <form id="admin_userManag_addForm" method="post"> <table> <tr> <th>编号</th> <td><input name="id" readonly="readonly" /> </tr> <tr> <th>登录名</th> <td><input name="name" class="easyui-validatebox" data-options="requird:true" /> </tr> <tr> <th>密码</th> <td><input name="pwd" type="password" class="easyui-validatebox" data-options="requird:true" /> </tr> <tr> <th>创建时间</th> <td><input name="creatTime" readonly="readonly" /> </tr> <tr> <th>修改时间</th> <td><input name="endTime" readonly="readonly" /> </tr> </table> </form></div>
2. userManagEdit.jsp
该页面是在进行更改数据时弹出的那个页面,作为一个表单,当点击“编辑”的时候向通过form表单提交的方式向后台发送数据。
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%><form id="admin_userManagEdit_Form" method="post" > <table> <tr> <th>编号</th> <td><input name="id" readonly="readonly" /> </tr> <tr> <th>登录名</th> <td><input name="name" class="easyui-validatebox" data-options="requird:true" /> </tr> <tr> <th>密码</th> <td><input name="pwd" type="password" class="easyui-validatebox" data-options="requird:true" /> </tr> <tr> <th>创建时间</th> <td><input name="creatTime"/> </tr> <tr> <th>修改时间</th> <td><input name="endTime" /> </tr> </table></form>
3. 对应UserAction中的方法
public void datagrid() { // 依据EasyUI框架需要的json数据内容定义的pageModel // 也可以用Map // Map m = new HashMap(); // m.put("total",0); // m.put("rows",new ArrayList()); super.writeJson(userService.datagrid(user));}/** * 添加一条数据 */public void addUser() { HwJson j = new HwJson(); try { userService.save(user); j.setSuccess(true); j.setMsg("添加成功"); j.setObj(user); } catch (Exception e) { j.setMsg(e.getMessage()); } super.writeJson(j);}public void remove() { userService.remove(user.getIds());}public void edit() { HwJson j = new HwJson(); try{ User u = userService.edit(user); j.setSuccess(true); j.setMsg("编辑成功"); j.setObj(u); }catch(Exception e){ j.setMsg(e.getMessage()); } super.writeJson(j);}
4. User(用于传递数据的pageModel,对应数据表的Model为Tuser)
public class User implements java.io.Serializable { private String id; private String name; private String pwd; private Date creatTime; private Date endTime; private int page; private int rows; private String sort; private String order; private String ids; ///相应setter和getter略}
5. HwJson.java:前台和后台传送数据的json数据格式定义
public class HwJson implements Serializable{ private boolean success = false; ///返回标识:返回的数据是否正确 private String msg = "";//返回的数据信息 private Object obj = null;//★★在后台增加、删除、修改以后可能还要返回相应对象给前台 //对应的setter和getter方法略}
6. DataGrid .java
依据EasyUI、Demo后台返回的数据格式来定义页面model
public class DataGrid { private Long total=0L; private List rows = new ArrayList(); //相应的getter和setter方法略}
7. hwUtils.js
扩展easyUI中的功能
/** * 扩展validatebox,添加验证两次密码功能 */$.extend($.fn.validatebox.defaults.rules,{ eqPwd:{ validator:function(value,param){ return value==$(param[0]).val(); }, message:"两次密码不一致!" }});/** * 一次性返回树的JSON串拼接 */$.fn.tree.defaults.loadFilter = function(data, parent) { var opt = $(this).data().tree.options; var idFiled, textFiled, parentField; if (opt.parentField) { idFiled = opt.idFiled || 'id'; textFiled = opt.textFiled || 'text'; parentField = opt.parentField; var i, l, treeData = [], tmpMap = []; for (i = 0, l = data.length; i < l; i++) { tmpMap[data[i][idFiled]] = data[i]; } for (i = 0, l = data.length; i < l; i++) { if (tmpMap[data[i][parentField]] && data[i][idFiled] != data[i][parentField]) { if (!tmpMap[data[i][parentField]]['children']) tmpMap[data[i][parentField]]['children'] = []; data[i]['text'] = data[i][textFiled]; tmpMap[data[i][parentField]]['children'].push(data[i]); } else { data[i]['text'] = data[i][textFiled]; treeData.push(data[i]); } } return treeData; } return data;};/** * 防止panel/window/dialog组件超出浏览器边界 */var easyuiPanelOnMove = function(left, top) { var l = left; var t = top; if (l < 1) { l = 1; } if (t < 1) { t = 1; } var width = parseInt($(this).parent().css('width')) + 14; var height = parseInt($(this).parent().css('height')) + 14; var right = l + width; var buttom = t + height; var browserWidth = $(window).width(); var browserHeight = $(window).height(); if (right > browserWidth) { l = browserWidth - width; } if (buttom > browserHeight) { t = browserHeight - height; } $(this).parent().css({/* 修正面板位置 */ left : l, top : t });};$.fn.dialog.defaults.onMove = easyuiPanelOnMove;$.fn.window.defaults.onMove = easyuiPanelOnMove;$.fn.panel.defaults.onMove = easyuiPanelOnMove;/** * ★将form表单元素的值序列化成对象 */serializeObject = function(form) { var o = {}; $.each(form.serializeArray(), function(index) { if (o[this['name']]) { o[this['name']] = o[this['name']] + "," + this['value']; } else { o[this['name']] = this['value']; } }); return o;};
0 0
- [SSH_easyUI]细节3:dataGrid区域实现增删改查
- easyui-datagrid 增删改查
- easyUI datagrid增删改查
- EasyUI Datagrid增删改查
- Flex的datagrid的增删改查
- 详谈easyui datagrid增删改查操作
- Easyui-DataGrid 的增删查改
- datagrid表格分页及增删改查
- 增删改查3
- xml实现增删查改
- web增删改查实现
- JDBC 实现增删改查
- MVC实现增删查改
- HQL实现增删改查
- ibatis实现增删改查
- javaScript实现增删改查
- JS实现增删改查
- Mybatis-实现增删改查
- 精度计算-大数阶乘
- Lrucache浅析
- setInterval引发的小问题
- 搭建Hadoop2.6+Hbase0.98.6+Nutch2.3环境
- icons(图标)网站
- [SSH_easyUI]细节3:dataGrid区域实现增删改查
- 使用Opencv
- Unreal Engine 4 AddOnScreenDebugMessage使用注意
- Java-----13、输入、输出
- 小小感悟
- 求两个字符串的最大公共子串【培训第三天】
- 6.12
- C/C++中函数返回局部变量的问题
- hdu 4069 舞蹈链