1,首先定義好後臺數據,返回一組json數據
@RequestMapping("/showUsers.do")
@ResponseBody
public Map<String, Object> userList(
@RequestParam(value = "page", required = false, defaultValue = "0") Integer page,
@RequestParam(value = "pageSize", required = false, defaultValue = "20") Integer pageSize) {
List<UserDto> users=userService.list(page,pageSize);
int count=userService.getTotalCount();
Map<String, Object> _result = new HashMap<String, Object>();
_result.put("results", users);
_result.put("__count", count);
Map<String, Object> result = new HashMap<String, Object>();
result.put("d", _result);
return result;
}
@RequestMapping("/users.do")
public String userListPage() {
return "user/user.jsp";
}
如上:後臺json格式爲固定,__count 對應數據總條數,前臺會根據配置自動分頁,
當然返回json格式也可以自定義,如返回格式爲
String json = new Gson().toJson(list);
return "{\"users\" :" + json + ", \"totalSize\" :" + totalSize + "}";
如此前臺定義 schema 時,需加入如下配置:(具體配置下面會看到)
data : "hosts",
total: "totalSize",
2,下面來看一下前臺部分
a,首先要有一個jsp頁面,並定義一個有id的div
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix='spring' uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<head>
<link rel="stylesheet" type="text/css" href="<spring:url value='/resources/css/common.css'/>" />
<link rel="stylesheet" type="text/css" href="<spring:url value='/resources/js/plugins/easyUI/themes/default/easyui.css' />">
<link rel="stylesheet" type="text/css" href="<spring:url value='/resources/css/themes/default/main.css' />">
<link rel="stylesheet" type="text/css" href="<spring:url value='/resources/css/themes/default/icon.css' />">
<link rel="stylesheet" type="text/css" href="<spring:url value='/resources/css/themes/default/bootstrap.css' />">
<link rel="stylesheet" type="text/css" href='<spring:url value="/resources/js/plugins/kendoui/styles/kendo.common.min.css"/>'/>
<link rel="stylesheet" type="text/css" href='<spring:url value="/resources/js/plugins/kendoui/styles/kendo.uniform.min.css"/>'/>
<link rel="stylesheet" type="text/css" href='<spring:url value="/resources/js/plugins/kendoui/styles/kendo.silver.min.css"/>'/>
<link rel="stylesheet" type="text/css" href='<spring:url value="/resources/css/kendo_ui_gray.css"/>'/>
<script src="<spring:url value='/resources/js/plugins/kendoui/js/jquery.min.js' />"></script>
<script src='<spring:url value="/resources/js/plugins/kendoui/js/kendo.all.min.js"/>'></script>
<script src="<spring:url value='/resources/js/plugins/jquery.easyui.min.js' />"></script>
<script src="<spring:url value='/resources/js/modules/user/userList.js' />"></script>
</head>
<body>
<div id="example" class="k-content">
<div id="clientsDb">
<div id="grid" style="height: 380px"></div>
</div>
</div>
<div id="dialog"></div>
</body>
b,來看一下js部分, 首先需要定義一個datasource
$(function() {
var dateFormate = "yyyy-MM-dd HH:mm:ss";
var prefix = "user";
var dataSource = new kendo.data.DataSource({
type: "odata",
pageSize : 20,
serverPaging: true,//服務器端是否進行分頁查詢
serverFiltering: true,
transport : {
read : {
url : prefix + '/showUsers.do',
dataType : "json",
},
update: {
url: prefix + '/save.do',
dataType: "json",
contentType:"application/x-www-form-urlencoded",
type : "post",
data: function() {
var roleid=$("#roleId").val();
return {
roleId:roleid
}
}
},
destroy: {
url: prefix + '/delete.do',
contentType:"application/x-www-form-urlencoded",
type : "post",
dataType: "json",
},
create: {
url: prefix + '/save.do',
dataType: "json",
contentType:"application/x-www-form-urlencoded",
type : "post",
data: function() {
var roleid=$("#roleId").val();
return {
roleId:roleid
}
}
},
parameterMap: function(data, type) {
if (type == "create"||type == "update") {
delete data.role;
var roleid=$("#roleId").val();
data.roleId=roleid;
}
return data;
}
},
requestEnd: function(e) {
var response = e.response;
if(response){
var type = e.type;
if(type !='read'){
var status = response.status;
if(status == 200){
//lert(response.message);
this.read();
} else {
alert(response.message);
}
}
}else{
alert("服務器異常,請重試!");
}
},
schema : {
model : {
id : "id",
fields : {
id : {type : "string"},
password :{type : "string"},
realName : {type : "string"},
phone : {type : "string"},
status : {
type : "string",
defaultValue : "激活"
},
userName : {type : "string"},
email : {type : "string"},
role : {},
createdTime : {
type : "string",
//this field will not be editable (default value is true)
editable: false,
defaultValue: kendo.toString(new Date(), dateFormate)
}
}
}
},
sort : {
field : "createdTime",
dir : "desc"
},
});
});
下面說一下重要的配置點,
dataSource:定義grid加載的數據源,以及配置增刪改 表單提交的url和需要的表單參數
首先需要配置一個dataSource來獲取後臺數據,以及增刪改的操作
那個type:odata 官網是這麼說的If set the data source will use a predefined transport and/or schema.
The supported values are "odata" which supports the OData v.2 protocol and "signalr".
沒看懂,反正就默認的odata就對了
transport ,就是配置增刪改查的連接,配置好,後都會自動操作的
注意的是sava 與update contentType:"application/x-www-form-urlencoded", 後臺可以直接通過對應的bean接收參數,
(字段類型最好一致,如時間的格式,不然可能會報400的錯,其實就是格式沒對應,如果出現,可通過firebug查看一下請求的參數書否對應)
create 中的data可在請求之前進行追加參數,注意是追加,格式也是json格式
parameterMap
type 就是“read” “create”等
data 就是 model 中定義的屬性,是json的格式,可通過判斷在提交表單時追加參數,或者去除無關的參數
requestEnd 是在操作完之後進行的回調時間,可獲取到response 進行判斷操作是否成功
對應的有requestStart 可以在請求發送之前進行js操作
schema 用於在轉換後臺發送來的數據 對應javabean
C,下面通過jquery選取 html中定義的對應id的div元素來加載通過kendo實例的grid
$("#grid").kendoGrid({
dataSource : dataSource,
sortable : false,
selectable : "multiple",// 多選
height : 500,
navigatable: true,
//toolbar: ["create", "save", "cancel"],
editable: true,
toolbar : [
{
name : "create",
text : "新增用戶"
}
],
pageable : {
pageSize : 20,// 一頁顯示多少行數據
previousNext : true,// 是否允許有上一頁、下一頁、首頁、尾頁摁扭
numeric : true,// 是否顯示翻頁處的頁數按鈕
buttonCount : 5,// 限制頁數按鈕的顯示個數
input : false,// 是否顯示輸入頁數的文本框
refresh : true,// 是否允許刷新頁面
pageSizes : true,// 是否允許調整一頁顯示的行數,可設置[5, 10, 15]
messages : {
display : "顯示 {0}-{1} 條數據 總共 {2} 條數據",
empty : "沒有數據",
itemsPerPage : "選擇顯示行數",
refresh : "刷新",
previous : "上一頁",
next : "下一頁",
last : "尾頁",
first : "首頁"
}
},
columns : [ // 顯示列定義
{
field : "realName",
width : 100,
title : "姓名"
}, {
field : "userName",
width : 120,
title : "用戶名",
attributes : {
"class" : "table-cell",
style : "text-align: left; font-size: 14px"
}
}, {
field : "password",
title : "密碼",
hidden: true,
editor: function (container, options) {
$('<input data-text-field="' + options.field + '" ' +
'class="k-input k-textbox" ' +
'type="password" ' +
'data-value-field="' + options.field + '" ' +
'data-bind="value:' + options.field + '"/>')
.appendTo(container);
}
}, {
field : "phone",
width : 120,
title : "聯繫電話"
}, {
field : "email",
width : 120,
title : "Email"
}, {
field : "role",
width : 80,
title : "角色",
template: "#=role.name#",
editor: roleDropDownEditor
},{
field : "status",
width : 80,
title : "啓動狀態",
editor : userStatusDownEditor,
template : "#=status#"
}, {
field : "createdTime",
width : 150,
title : "創建時間",
format : "{0: yyyy-MM-dd HH:mm:ss}"
},{
command : [
{
name : "edit",
text : {
edit : "信息修改",
cancel : "關閉",
update : "提交"
}
}, {
name : "destroy",
text : "刪除"
}
],
title : "操作",
width : "160px"
} ],
editable : {// 設置可以在列表中進行編輯數據
// 設置刪除時顯示的確認信息
confirmation : "您確定要進行刪除操作嗎?",
//createAt : "top",// 添加位置,默認是top:從第一行進行添加
destroy : true,// 不允許刪除
mode : "popup",// 設置編輯形式爲彈出框(popup)還是在列表中(inline)
// template: kendo.template($("#editTemplate").html())//設置彈出框中加載的內容,設置此項mode必須是popup
},
/*groupable : {// 設置列表表頭
messages : {empty : "用戶信息列表"}
},*/
groupable : false
});
function userStatusDownEditor(container, options){
var status = options.model.status;
var data = [
{ text: "激活", value: "激活" },
{ text: "凍結", value: "凍結" }
];
var statusDroplist = $('<input required data-text-field="text" data-value-field="value" data-bind="value:' + options.field + '"/>')
.appendTo(container).kendoDropDownList({
dataTextField: "text",
dataValueField: "value",
dataSource : data
});
statusDroplist.data("kendoDropDownList").select(function(dataItem) {
return dataItem.text === status;
});
}
function roleDropDownEditor(container, options) {
var role = options.model.role;
//console.log(options);
var roleDroplist = $('<input required id="roleId" data-text-field="name" data-value-field="id" data-bind="value:' + options.field + '"/>')
.appendTo(container).kendoDropDownList({
valuePrimitive: true,
dataTextField:"role.name",
dataValueField: "role.id",
dataSource: {
transport: {
read: {
url : 'role/getRoles.do',
dataType: "json"
}
}
}
});
// console.log(roleDroplist.data("kendoDropDownList"));
/* roleDroplist.data("kendoDropDownList").select(function(dataItem) {
if(role)
return dataItem.value === role.id;
});*/
}
重要配置參數:
toolbar 有3個選項 "create", "save", "cancel" 用於save操作,定義後,kendo會通過datasource中的配置自動生成一個form的window
pageable 用於定義分頁的信息,其中後臺可直接獲取 page,pageSize 參數
columns 定義顯示的javabean中的屬性,field 對應javabean屬性,title 顯示grid的中的head,attributes 可定義一些css
template 可用於定義 每一條數據中的特定數據內容如:user,對應的role,很明顯顯示對應的role.name ,就可配置爲"#=role.name#",
也可定義爲一個function,返回對應的顯示值 如status
var statusMap= {"A": "Active", "B": "INActive", "C": "Deleted"};
{
field: "status",
title: "狀態",
template: function(dataItem) {
return statusMap[dataItem.status];
},
editor: statusDropDownListEditor,
width: 80
},
editor ,用於在update和save的form 中定義編輯組件,如下拉框,他需要定義一個function
function osDropDownListEditor(container, options){
$('<input required data-text-field="text" data-value-field="value" data-bind="value:' + options.field + '"/>')
.appendTo(container).kendoDropDownList({
dataSource:[{"text": "Active", value:"A"}, {text: "INActive", value:"B"},{text:"Unknown", value:""}],
dataTextField: "text",
dataValueField: "value",
});
};
這個事簡單的字段取出值對應顯示值,不需去數據庫,
下面可看一下user新增時,選擇對應的role,首先需要重數據庫中取出所有可用的role以供選擇
colums中對應model的定義
{
field : "role",
width : 80,
title : "角色",
template: "#=role.name#",
editor: roleDropDownEditor
},
roleDropDownEditor function
function roleDropDownEditor(container, options) {
var role = options.model.role;
//console.log(options);
var roleDroplist = $('<input required id="roleId" data-text-field="name" data-value-field="id" data-bind="value:' + options.field + '"/>')
.appendTo(container).kendoDropDownList({
valuePrimitive: true,
dataTextField:"name",
dataValueField: "id",
dataSource: {
transport: {
read: {
url : 'role/getRoles.do',
dataType: "json"
}
}
}
});
// console.log(roleDroplist.data("kendoDropDownList"));
/* roleDroplist.data("kendoDropDownList").select(function(dataItem) {
if(role)
return dataItem.value === role.id;
});*/
}
利用kendo的kendoDropDownList
input中的data-text-field data-value-field 分別對應下拉框的顯示值 與選擇是存的value, 填寫對應role的id name
kendoDropDownList的屬性
dataSource:定義要從後臺取得role的list
dataTextField:"name", dataValueField: "id",分別對應去到的role中的id,與name,kendo會自動裝填到下拉框中
這裏有些問題,kendo在提交表單時好像不能像普通的form表單一樣直接通過如定義name=role.id,然後在後臺直接通過user.role.來取,
我也嘗試過將role改爲json的格式提交,但都失敗了,因此值得在save提交時去掉role參數,換成追加參數roleId來實現,這裏要說一下表單提交時如果參數對不上可能會出現400的錯誤,
這是需要通過firebug查看一下請求時post的參數,
當然我在後臺接收時是通過JavaBean接收的,如果通過map來接收,或者直接通過request.getparameter,應該不會出現。
command ,用於定義表格中對應每一行的編輯或者刪除按鈕
只需把name給與“editor”,“destory” 剩餘的就交給kendo吧
轉載地址:http://www.cnblogs.com/whatadiors/p/3789005.html