前言
这两天摸索了使用easyui完成一个小的页面,从数据库中读取一部分数据,以表格形式分页显示在前台。总体上easyui很方便的,但是有一些小的细节不注意的话会让你耽误一点时间。
"js/jquery-easyui-1.4.4/themes/default/easyui.css">
"js/jquery-easyui-1.4.4/themes/icon.css">
"js/jquery-easyui-1.4.4/demo/demo.css">
class="easyui-datagrid" style="width:100%;height:100%"
>
下载ID
用户ID
用户昵称
资源名称
用户标签
下载次数
时间
class="easyui-dialog" style="background-color: #eee;padding:20px;">
注意我加上红色的部分,就是一个声明。声明为一个数据表格,一个为对话框。展示下效果
function createListData(){
$('#listdata').datagrid({
title:'文件下载列表' ,
iconCls:'icon-edit',//图标
striped: true,
/*url:"DownloadList!queryByPage.action",*/
nowrap:"true",
loadMsg:"数据正在加载,请稍候",
fitColumns:"true",
singleSelect:"false",
collapsible:false,//是否可折叠的
fit: true,//自动大小
remoteSort:false,
idField:'fldId',
rownumbers:true,//行号
pagination:true,//分页
border:true,
onDblClickRow:function(rowIndex,rowData){
openDetailsMsgDia(rowData);
},
/*onBeforeLoad:function(param){
},*/
frozenColumns:[[
{field:'ck',checkbox:true
}
]],
toolbar: [{
text: '添加',
iconCls: 'icon-add',
handler: function() {
openDialog("add_dialog","add");
}
}, '-', {
text: '修改',
iconCls: 'icon-edit',
handler: function() {
openDialog("add_dialog","edit");
}
}, '-',{
text: '删除',
iconCls: 'icon-remove',
handler: function(){
deleteRecord();
}
}],
});
$("#listdata").datagrid('hideColumn', 'download_id');//设置隐藏域
//设置分页控件
var p = $('#listdata').datagrid('getPager');
$(p).pagination({
pageSize: 5,//每页显示的记录条数,默认为10
pageList: [5,10,15],//可以设置每页记录条数的列表
beforePageText: '第',//页数文本框前显示的汉字
afterPageText: '页 共 {pages} 页',
displayMsg: '当前显示 {from} - {to} 条记录 共 {total} 条记录'
,onSelectPage:function(pageNumber,pageSize){
getData(pageNumber,pageSize);
}
});
getData(1,5);
}
这个js函数就是初始化datagrid的。
url:"DownloadList!queryByPage.action"
加上这句,在datagrid初始化时,就会自动去执行这个url,也就是去执行这个action,后面可以通过&加参数
至于数据如何传回来。以什么格式。一会说
pagination:true,这句话制定,这个table具有分页功能。
var p = $('#listdata').datagrid('getPager');
$(p).pagination({
pageSize: 5,//每页显示的记录条数,默认为10
pageList: [5,10,15],//可以设置每页记录条数的列表
beforePageText: '第',//页数文本框前显示的汉字
afterPageText: '页 共 {pages} 页',
displayMsg: '当前显示 {from} - {to} 条记录 共 {total} 条记录'
,onSelectPage:function(pageNumber,pageSize){
getData(pageNumber,pageSize);
}
});
listdata也就是datagrid数据表格的id.定义分页:
System.out.println("pageSize:"+pageSize+"pageNumber"+pageNumber);
List list = downloadService.queryByPage(pageNumber, pageSize);
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("UTF-8");
PrintWriter out;
try {
//json
out = response.getWriter();
JsonConfig jsonConfig = new JsonConfig();
// 设置javabean中日期转换时的格式
jsonConfig.registerJsonValueProcessor(Date.class,
new JsonDateValueProcessor("yyyy-MM-dd HH:mm:ss"));
// 获取json数组
JSONArray jsonList = JSONArray.fromObject(list, jsonConfig);
JSONObject jsonObject = new JSONObject();
jsonObject.put("total", downloadService.getCountsAll());
jsonObject.put("rows", jsonList);
//jsonObject.
out.print(jsonObject);
out.flush();
out.close();
} catch (IOException e) {
//
e.printStackTrace();
}
先看蓝色的部分:total指定总条数。rows指定 表格显示的数据
package util;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Locale;
//import java.util.Arrays.ArrayList;
import java.util.Date;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonBeanProcessor;
import net.sf.json.processors.JsonValueProcessor;
import demo.entities.User;
import demo.entities.view.download;
*/public class JsonDateValueProcessor implements JsonValueProcessor {
private String datePattern = "yyyy-MM-dd HH:mm:ss";// 日期格式
public JsonDateValueProcessor() {
super();
}
// 构造函数
public JsonDateValueProcessor(String format) {
super();
this.datePattern = format;
}
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
// TODO Auto-generated method stub
return process(value);
}
public Object processObjectValue(String key, Object value,
JsonConfig jsonConfig) {
// TODO Auto-generated method stub
return process(value);
}
private Object process(Object value) {
try {
if (value instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat(datePattern,
Locale.UK);
return sdf.format((Date) value);
}
return value == null ? "" : value.toString();
} catch (Exception e) {
return "";
}
}
public String getDatePattern() {
return datePattern;
}
public void setDatePattern(String datePaterns) {
this.datePattern = datePaterns;
}
public static void main(String[] args) {
ArrayList list = new ArrayList();
download download = new download();
download.setTime(new Date());
list.add(download);
JsonConfig jsonConfig = new JsonConfig();
// 设置javabean中日期转换时的格式
jsonConfig.registerJsonValueProcessor(Date.class,
new JsonDateValueProcessor("yyyy-MM-dd HH:mm:ss"));
// 获取json数组
JSONArray jsonArray = JSONArray.fromObject(list, jsonConfig);
System.out.println(jsonArray.toString());
}
}
通过这个自定义的类实现转换。这样date转化就更方便了,可以看到jsonArray直接可以将一个bean的list转化为json,
onSelectPage:function(pageNumber,pageSize){
getData(pageNumber,pageSize);
}
这个函数是在页数改变时,easyui自动调用的,getdata()是我们自定义的函数。没改变一下页码,我们都要向后台要数据
function getData(pageNumber,pageSize)
{
$.ajax({
dataType:'json',
url:'DownloadList!queryByPage.action',
data:{pageSize:pageSize,pageNumber:pageNumber},
type:'post',
success:function(data,status){
$('#listdata').datagrid('loadData',data);
$("#listdata").datagrid('reload');
},
error:function(data,status){
$.messager.alert('系统提示','对不起,登录超时请重新登录'+data+status,'error',function(){
/*location.href = '/index.jsp';*/
});
}
});
}
我们是用ajax异步获取数据。
onDblClickRow:function(rowIndex,rowData){
openDetailsMsgDia(rowData);
},
初始化datagrid时指定了这个属性。当双击记录时调用自定义函数
function openDetailsMsgDia(rowData){
//alert();
$('#detailsMsg').html("
"+
"下载记录ID:"+rowData.download_id+"
"+
"用户名:"+rowData.username+"
"+
"用户ID:"+rowData.user_id+"
"+
"文件名称:"+rowData.resource_name+"
"+
"文件类别:"+rowData.resource_label+"
"+
"下载次数:"+rowData.resource_download_times+"
"+
"下载时间:"+rowData.time+"
"+
"");
//alert();
//$.messager.alert($('#detailsMsg').html());
$('#detailsMsg').dialog('open');
//alert();}
这个detailMsg就是前面定义的
$('#detailsMsg').dialog('open');
弹出这个窗体。同时可以看到onDblClickRow:function(rowIndex,rowData){
openDetailsMsgDia(rowData);
},
这有两个参数,index,和rowData,分别代表单击的 记录的行号,和数据。rowData是数组,通过rowData,属性名,获取该行该属性列的数据。
function createDetailsMsg()
{
$('#detailsMsg').dialog({
title:'详细信息',
width:400,
height:400,
left: 250,
top:10,
collapsible:true,
closed:true
,buttons:[{
text:'关闭',
iconCls:'icon-cancel',
handler:function(){
$('#detailsMsg').dialog('close');
}
}]
});
}
那么谁来执行这个初始化函数呢,由window.onload来执行。
window.onload = function(){
createDetailsMsg();
createListData();
}
toolbar: [{
text: '添加',
iconCls: 'icon-add',
handler: function() {
openDialog("add_dialog","add");
}
}, '-', {
text: '修改',
iconCls: 'icon-edit',
handler: function() {
openDialog("add_dialog","edit");
}
}, '-',{
text: '删除',
iconCls: 'icon-remove',
handler: function(){
deleteRecord();
}
}],
细心地朋友会发现,我们还为这个数据表格定义了几个工具,增删改。就拿最简单的删除做一个例子吧。首先当用户单击删除时,会调用deleteRecord()
function deleteRecord() { var row = $("#listdata").datagrid('getSelected'); /*for(var i=0;i
var row = $("#listdata").datagrid('getSelected');
获取到用户点击的项的记录。目前只支持单行选择。
$.messager.alert('系统提示','删除失败,回到登录界面','warning',function(){
location.href = '{项目名称}/index.jsp';
}*/);