<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>dataGrid</title>
</head>
<%@ include file = "head.jsp" %>
<body>
<!-- 其他頁面調用時,確保引入的js文件在body內,否則不會加載引入相關 文件 -->
<script type="text/javascript" src="<%=request.getContextPath()%>/js/grid.js"></script>
<div class="easyui-layout" data-options="fit:true">
<div data-options="region:'west',border:true" title="菜單" style="width:200px;">
</div>
<div data-options="region:'center',border:false" title="">
<div class="easyui-layout" data-options="fit:true">
<div data-options="region:'north',border:false" title="查詢條件" style="height:90px">
<div style="width: 970px;">
<form id="qf">
<table>
<tr>
<td >用戶名:</td>
<td><input name="username" class="easyui-textbox" /></td>
<td >真實姓名:</td>
<td><input name="realname" class="easyui-textbox"/></td>
<td >CC:</td>
<td><input name="cc" class="easyui-datebox" data-options="editable:false,formatter:formatterDateBox"></input></td>
<td>
<a id="query" class="easyui-linkbutton" data-options="plain:false,iconCls:'icon-zoom'">查詢</a>
</td>
</tr>
<tr>
<td>DD:</td>
<td><input name="dd" class="easyui-textbox" /></td>
<td>EE:</td>
<td colspan="3"><input name="ee" class="easyui-textbox" /></td>
<td>
<a id="clear" class="easyui-linkbutton" data-options="plain:false,iconCls:'icon-cross'">重置</a>
</td>
</tr>
</table>
</form>
</div>
</div>
<div data-options="region:'center',border:false" title="數據列表">
<table id="grid" toolbar="#gridbar"></table>
<div id="gridbar">
<div style="padding: 2px">
<a id="addBtn" class="easyui-linkbutton" data-options="plain:false,iconCls:'icon-add'">新增</a>
<a id="updateBtn" class="easyui-linkbutton" data-options="plain:false,iconCls:'icon-page_edit'">查看/更新</a>
<a id="delBtn" class="easyui-linkbutton" data-options="plain:false,iconCls:'icon-delete'">刪除</a>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
3.數據庫連接+datagrid數據返回類
/** grid對象+渲染+按鈕* */
var grid = $("#grid");
renderGrid();
bindGridToorBar();
//渲染datagrid,固定數據無法分頁。
function renderGrid(){
grid.datagrid({
url :URL.gridData,
onDblClickRow : function(index,row) {//雙擊事件
openFormWin(row.id);
},
frozenColumns :[[
{field:"id",checkbox:true},
{field:"name",title:"a",align:"left",halign:"center",width:100},
{field:"idcard",title:"b",align:"left",halign:"center",width:100},
{field:"c",title:"c",align:"left",halign:"center",width:100},
]],
columns:[[
{field:"d",title:"d",align:"left",halign:"center",width:100},
{field:"e",title:"e",align:"left",halign:"center",width:100},
{field:"f",title:"f",align:"left",halign:"center",width:100},
{field:"g",title:"g",align:"left",halign:"center",width:100},
{field:"h",title:"h",align:"left",halign:"center",width:100},
{field:"cz",title:"操作",align:"center",halign:"center",width:200,formatter: fmtCz}
]],
onLoadSuccess : function(){
$(".fmtBtn").linkbutton({
plain : true,
onClick : function(){
var id = $(this).data("id");
doSomething(id);
}
});
//也可用只渲染爲按鈕
$(".fmtBtn").each(function(){
var d = $(this).data("d");
$(this).tooltip({
position: 'right',
content: "<span style='color:#abc'>"+d+"</span>",
onShow: function(){
$(this).tooltip('tip').css({
backgroundColor: '#666',
borderColor: '#666'
});
}
});
});
}
})
}
/**
* formatter方法
*/
function fmtCz(value,row,index){
return "<a class='fmtBtn' data-id='"+row.id+"' data-d='"+row.d+"' href='#' style='background-color:#36BDEF;color:#FFFFFF;'>點擊</a>";
}
package dataGrid;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject;
/**
* 獲取datagrid數據列表並分頁
* @author wsz
* @date 2017年12月16日
*/
public class GetDataGrid extends HttpServlet {
private static final long serialVersionUID = 1L;
public GetDataGrid() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int page = Integer.parseInt("".equals(ConnUtil.nullToEmpty(request.getParameter("page"))) ? "0" : request.getParameter("page"));
int rows = Integer.parseInt("".equals(ConnUtil.nullToEmpty(request.getParameter("rows"))) ? "0" : request.getParameter("rows"));
String uname = ConnUtil.nullToEmpty(request.getParameter("username"));
String rname = ConnUtil.nullToEmpty(request.getParameter("realname"));
String conditions = "";//判斷和組裝查詢條件
if(!"".equals(uname)) {
conditions += " and username = '"+uname+"' ";
}
if(!"".equals(rname)) {
conditions += " and real_name like '%"+rname+"%' ";
}
PreparedStatement ps = null;
ResultSet rs = null;
Connection conn = ConnUtil.getConnection();
page = (page < 0) ? 1 : page;
rows = (rows < 0) ? 0 : rows;
int start = (page-1)*rows;
int end = page*rows-1;
List<Student> list = new ArrayList<Student>();
if(conn != null) {
try {
String sql = "select * from t_user where deleted=0 "+conditions+" limit ?,?";
ps = conn.prepareStatement(sql);
ps.setInt(1, start);
ps.setInt(2, end);
rs = ps.executeQuery();
int count=0;
while(rs.next()) {
int id = rs.getInt("id");
String username = rs.getString("username");
String realName = rs.getString("real_name");
Student s = new Student();
s.setId(id);
s.setName(username);
s.setIdcard(realName);
list.add(s);
count++;
}
DataGrid grid = new DataGrid();
grid.setTotal(count);
grid.setRows(list);
response.getWriter().write(JSONObject.toJSONString(grid));//返回數據必須滿足格式
} catch (SQLException e) {
e.printStackTrace();
}finally {
ConnUtil.clearSelectConn(conn,ps,rs);
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
4.3查詢
/** 查詢表單+按鈕* */
var queryForm = $("#qf");
bindSearchBtns();
/** 查詢按鈕事件 **/
function bindSearchBtns(){
//帶參數,也可序列化數組類型,load時可查看js中url中的參數
$("#query").unbind().bind("click",function(){
var formData = queryForm.serializeObject({transcript:"overlay"});//序列化時,必須有head.jsp中定義的方法
grid.datagrid("load",formData);//查詢並獲取
});
//查詢form清空
$("#clear").unbind().bind("click",function(){
queryForm.form("clear");
});
}
4.4新增+查看/修改+刪除
- 三個操作按鈕
- 新增頁面
- 修改頁面(與新增頁面同一個,注意隱藏的id屬性),同時需要formLoadData從後臺獲取信息
- 刪除:只需要獲取grid列表中的主鍵信息。
/** grid按鈕事件* */
function bindGridToorBar() {
$("#addBtn").bind("click",function(){
openFormWin();
});
$("#updateBtn").bind("click",function(){
var row = gridSelectedValid(grid);
if(row){
openFormWin(row.id);
}
});
$("#delBtn").bind("click",function(){
deleteByIds();
});
}
/**跳轉到其他頁面**/
function openFormWin(id){
var win = $("<div id='newWin'></div>").window({
title : id ? "查看" :"新增",
href :URL.formWin,
width : 500,
height : 300,
onLoad : function(){
if(id){
formLoadData(id);
}
},
onClose : function() {
win.window('destroy');
}
});
}
//查詢數據並渲染展示到頁面
function formLoadData(id){
$.ajax({
type : "get",
url :URL.getInfo,
data : {id:id},
success : function(data){
//{id:"1",username:"111",realname:"11111"}
var json = jQuery.parseJSON(data);//轉換一次數據結構
$("#saveForm").form("load", json);//填入數據
}
});
}
//刪除測試
function deleteByIds(){
var ids = gridCheckedValid(grid);
if(ids){
$.messager.confirm("提示","是否確定?",function(r){
if(r){
$.messager.progress({text:"正在保存..."});
$.ajax({
url : URL.deleteByIds,
type : "get",
data :{ids:ids},
success : function(data){
$.messager.progress("close");
$.messager.show({
title:'提示',
msg:data
});
if(data == "success"){//操作成功進行刷新
grid.datagrid("reload");
}
}
});
}
});
}
}
4.5新增/修改操作
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>新增/修改頁面</title>
</head>
<body>
<!-- 注意引入js的位置必須包含在body內 -->
<script type="text/javascript" src="<%=request.getContextPath()%>/js/newWin1.js"></script>
<div id="cc" class="easyui-layout" data-options="fit:true">
<div data-options="region:'center'" style="padding:3px;background:#eee;">
<form id="saveForm">
<input name="id" type="hidden"/>
<table>
<tr>
<td>用戶名</td>
<td><input name="username" class="easyui-textbox" data-options="required:true"/></td>
</tr>
<tr>
<td>真實姓名</td>
<td><input name="realname" class="easyui-textbox" /></td>
</tr>
</table>
</form>
</div>
<div data-options="region:'south'" style="height:33px;padding:3px;text-align: center" >
<a id="saveBtn" class="easyui-linkbutton" data-options="iconCls:'icon-page_save'">保存</a>
<a id="closeBtn" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'">關閉</a>
</div>
</div>
</body>
</html>
$(function(){
var URL = {
saveObj : "AddGridData"
};
var addForm = $("#saveForm");
renderBtn();
function renderBtn(){
$("#saveBtn").bind("click",function(){
saveObj();
});
$("#closeBtn").bind("click",function(){
$("#newWin").window("destroy");//close有時會無法關閉,可直接銷燬
});
}
function saveObj(){
var formData = addForm.serializeObject();
if(addForm.form("validate")){
$.messager.confirm("提示","是否保存?",function(r){
if(r){
$.messager.progress({text:"正在保存..."});
$.ajax({
url : URL.saveObj,
data :formData,
type :"post",
success: function(data){
$.messager.progress("close");
$.messager.show({
title:'提示',
msg:data
});
if(data == "success"){
$("#newWin").window("destroy");//close有時會無法關閉,可直接銷燬
$("#grid").datagrid("load");//刷新datagrid
}
}
});
}
});
}
}
});
package dataGrid;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 新增/修改servlet
* @author wsz
* @date 2017年12月16日
*/
public class AddGridData extends HttpServlet {
private static final long serialVersionUID = 1L;
public AddGridData() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = ConnUtil.nullToEmpty(request.getParameter("id"));
String username = ConnUtil.nullToEmpty(request.getParameter("username"));;
String realname = ConnUtil.nullToEmpty(request.getParameter("realname"));
//判斷操作類型。不存在(爲空)id即新增;否則爲修改更新
boolean isOk = false;
if(!"".equals(id)) {
isOk = updateObj(id,username,realname);
}else {
isOk = saveObj(username,realname);
}
response.getWriter().write(isOk ? "success" : "false");
doGet(request, response);
}
/**
* 更新操作
* @param id
* @param username
* @param realname
* @return
*/
private boolean updateObj(String id, String username, String realname) {
Connection conn = ConnUtil.getConnection();
PreparedStatement pst = null;
int count = 0;
if(conn != null) {
String sql = "update t_user set username = ? , real_name = ? where id = ?";
try {
pst = conn.prepareStatement(sql);
pst.setString(1, username);
pst.setString(2, realname);
pst.setInt(3, Integer.parseInt(id));
count = pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
return count > 0 ? true : false;
}
/**
* 保存操作
* @param username
* @param realname
* @return
*/
public boolean saveObj(String username,String realname) {
Connection conn = ConnUtil.getConnection();
PreparedStatement pst = null;
int total = 0;
if(conn != null) {
String sql = "insert into t_user(username,real_name,password,deleted) "
+ " values(?,?,'123456',0)";
try {
pst = conn.prepareStatement(sql);
pst.setString(1, username);
pst.setString(2, realname);
total = pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
ConnUtil.clearUpdateConn(conn,pst);
}
}else {
System.out.println("連接數據庫失敗");
}
return total > 0 ? true : false ;
}
}
4.6刪除代碼
package dataGrid;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 刪除操作servlet
* @author wsz
* @date 2017年12月16日
*/
public class DeleteGridData extends HttpServlet {
private static final long serialVersionUID = 1L;
public DeleteGridData() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String ids= request.getParameter("ids");
Connection conn = ConnUtil.getConnection();
PreparedStatement pst = null;
int rs =0;
try {
String sql = "update t_user set deleted = 1 where id in ("+ids+")";
System.out.println(sql);
pst = conn.prepareStatement(sql);
rs = pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
ConnUtil.clearUpdateConn(conn, pst);
}
response.getWriter().write((rs > 0) ? "success" : "false");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
4.7完整grid.js
$(function(){
var URL = {
gridData : "GetDataGrid",
deleteByIds : "DeleteGridData",
formWin : "newWin.jsp",
getInfo : "GetInfo"
};
/** 模塊名稱* */
var modelName = "demo";
/** 查詢表單+按鈕* */
var queryForm = $("#qf");
bindSearchBtns();
/** grid對象+渲染+按鈕* */
var grid = $("#grid");
renderGrid();
bindGridToorBar();
//渲染datagrid,固定數據無法分頁。
function renderGrid(){
grid.datagrid({
url :URL.gridData,
onDblClickRow : function(index,row) {//雙擊事件
openFormWin(row.id);
},
frozenColumns :[[
{field:"id",checkbox:true},
{field:"name",title:"a",align:"left",halign:"center",width:100},
{field:"idcard",title:"b",align:"left",halign:"center",width:100},
{field:"c",title:"c",align:"left",halign:"center",width:100},
]],
columns:[[
{field:"d",title:"d",align:"left",halign:"center",width:100},
{field:"e",title:"e",align:"left",halign:"center",width:100},
{field:"f",title:"f",align:"left",halign:"center",width:100},
{field:"g",title:"g",align:"left",halign:"center",width:100},
{field:"h",title:"h",align:"left",halign:"center",width:100},
{field:"cz",title:"操作",align:"center",halign:"center",width:200,formatter: fmtCz}
]],
onLoadSuccess : function(){
$(".fmtBtn").linkbutton({
plain : true,
onClick : function(){
var id = $(this).data("id");
doSomething(id);
}
});
//也可用只渲染爲按鈕
$(".fmtBtn").each(function(){
var d = $(this).data("d");
$(this).tooltip({
position: 'right',
content: "<span style='color:#abc'>"+d+"</span>",
onShow: function(){
$(this).tooltip('tip').css({
backgroundColor: '#666',
borderColor: '#666'
});
}
});
});
}
})
}
/**
* formatter方法
*/
function fmtCz(value,row,index){
return "<a class='fmtBtn' data-id='"+row.id+"' data-d='"+row.d+"' href='#' style='background-color:#36BDEF;color:#FFFFFF;'>點擊</a>";
}
/*
* 進行其他操作
*/
function doSomething(id){
alert(id);
}
/** grid按鈕事件* */
function bindGridToorBar() {
$("#addBtn").bind("click",function(){
openFormWin();
});
$("#updateBtn").bind("click",function(){
var row = gridSelectedValid(grid);
if(row){
openFormWin(row.id);
}
});
$("#delBtn").bind("click",function(){
deleteByIds();
});
}
/** 查詢按鈕事件 **/
function bindSearchBtns(){
//帶參數,也可序列化數組類型,load時可查看js中url中的參數
$("#query").unbind().bind("click",function(){
var formData = queryForm.serializeObject({transcript:"overlay"});
grid.datagrid("load",formData);
});
//查詢form清空
$("#clear").unbind().bind("click",function(){
queryForm.form("clear");
});
}
/**跳轉到其他頁面**/
function openFormWin(id){
var win = $("<div id='newWin'></div>").window({
title : id ? "查看" :"新增",
href :URL.formWin,
width : 500,
height : 300,
onLoad : function(){
if(id){
formLoadData(id);
}
},
onClose : function() {
win.window('destroy');
}
});
}
//查詢數據並渲染展示到頁面
function formLoadData(id){
$.ajax({
type : "get",
url :URL.getInfo,
data : {id:id},
success : function(data){
//{id:"1",username:"111",realname:"11111"}
var json = jQuery.parseJSON(data);//轉換一次數據結構
$("#saveForm").form("load", json);
}
});
}
//刪除測試
function deleteByIds(){
var ids = gridCheckedValid(grid);
if(ids){
$.messager.confirm("提示","是否確定?",function(r){
if(r){
$.messager.progress({text:"正在保存..."});
$.ajax({
url : URL.deleteByIds,
type : "get",
data :{ids:ids},
success : function(data){
$.messager.progress("close");
$.messager.show({
title:'提示',
msg:data
});
if(data == "success"){//操作成功進行刷新
grid.datagrid("reload");
}
}
});
}
});
}
}
});
5.總結