jQuery EasyUI学习二
阅读原文时间:2023年07月12日阅读:2

1.   课程介绍

  • 1.  Datagrid组件(掌握)
  • 2.  Dialog、form组件(掌握)
  • 3. Layout、Tabs;(掌握)
  1. Datagrid组件

2.1.  部署运行pss启动无错

2.1.1.   记得打勾

2.1.2.   修改server.xml

2.2.  修改datagrid.jsp集成easyui

2.2.1.     拷贝原来easyui1 webapp下面的easyui文件夹

2.2.2.     拷贝原来easyui1 webapp下面的common.jsp里面的内容到datagrid.jsp

2.2.3.     先写linkbutton,看有无效果

2.3.  修改execute方法变成分页查询

2.3.1.   原来的代码没有分页

// 专门返回json数据

// 应该是发出一个ajax请求 http://localhost/datagrid_json.action

public String json() throws Exception {

// #map

// 只拿前10条

putContext("map", employeeService.getAll().subList(0, 10));

//

return "json";

}

2.3.2.   今天的代码有分页

@Controller

@Scope("prototype")

public class DatagridAction extends BaseAction {

@Autowired

private IEmployeeService employeeService;

// 没有提供getter,setter方法

private EmployeeQuery baseQuery = new EmployeeQuery();

// 显示一个页面,不添加数据

// http://localhost/datagrid.action

@Override

public String execute() throws Exception {

return SUCCESS;

}

// 专门返回json数据

// 应该是发出一个ajax请求 http://localhost/datagrid_json.action

public String json() throws Exception {

// #map

PageList pageList = employeeService.findPageByQuery(baseQuery);

putContext("map", pageList);

//

return "json";

}

public EmployeeQuery getBaseQuery() {

return baseQuery;

}

public void setBaseQuery(EmployeeQuery baseQuery) {

this.baseQuery = baseQuery;

}

}

2.4.  处理输出的json数据

http://localhost:8080/datagrid_json.action

2.4.1.   输出多余的数据

2.4.2.   减少json数据输出

如果输出的json数据比较少,提高访问性能

对一些easyui datagrid不需要的属性进行不输出:只需要2个属性total,rows

在Employee标注注解

@JSON(serialize = false)//roles属性json不输出

public Set getRoles() {

return roles;

}

在PageList标注注解

@JSON(serialize = false)   很多属性都不输出

public int getTotalPage()

@JSON(name = "rows")     改名

public List getData() {

@JSON(name = "total")     改名

public int getTotalCount() {

2.4.3.   只输出需要的数据

2.5.  修改datagrid.jsp显示json数据

直接从

http://localhost:8888/demo/main/index.php?plugin=Application&theme=default&dir=ltr&pitem=

2.5.1.   拷贝datagrid的代码替换刚才linkbutton

编号 用户名 密码 年龄 Email 头像 部门名称

2.5.2.         显示效果

2.6.  进行数据格式化-和原来自定义插件写的代码类似

2.6.1.   原来自定义插件代码

2.6.2.   怎样看easyui的文档来处理部门,头像的效果

2.6.3.   今天的代码

function ageFormat(value,row,index) {

//              单元格formatter(格式化器)函数,带3个参数:

//              value:字段值。

//              row:行记录数据。

//              index: 行索引。

//              console.debug(value);

//              console.debug(row);

//              console.debug(index);

return value < 30 ? '' + value + '' : value;

}

2.6.4.   效果

2.7.  处理分页

2.7.1.   分析

json数据中已经输出了总的记录条

第一次提交参数:没有分页条件,默认提交

page   1

rows   10

第二次提交参数,手动改变切换到第二页

page   2

rows   10

2.7.2.   结论

page==baseQuery.currentPage,当前页码

rows=baseQuery.pageSize,一页显示的条数

2.7.3.   修改DatagridAction

添加easyui兼容代码,getter,setter

private int page=1;

private int rows=10;

public String json() throws Exception {

baseQuery.setCurrentPage(page);

baseQuery.setPageSize(rows);

PageList pageList = employeeService.findByQuery(baseQuery);

putContext("map", pageList);

return "jsonResult";// 不能返回页面,只能返回json视图===jsonResult

}

2.8.  datagrid组件常用属性

Insert title here

用户名 密码 年龄 Email 头像 部门名称

2.9.  处理datagrid上面工具条

<table toolbar="#toolbar"

不要把下面的div放到table的内部,放到外部

function addEmployee() {

console.debug("add");

}

function editEmployee() {

console.debug("edit");

}

function deleteEmployee() {

console.debug("delete");

}

  1. 删除功能

3.1.  后台

// 从datagrid页面发出的ajax请求:删除方法,单个对象{},集合[{},{}]

public String delete() throws Exception {

Map map = new HashMap();

try {

employeeService.delete(id);

map.put("success", true);

} catch (Exception e) {

map.put("success", false);

map.put("msg", "异常:" + e.getMessage());

}

putContext("map", map);

return "json";// 不能返回页面,只能返回json视图===json

}

3.2.  前台

function deleteEmployee() {

console.debug("delete");

//调用datagrid组件的getSelected方法当前选中的只是一行

//getSelections none 返回所有被选中的行,当没有记录被选中的时候将返回一个空数组。

//getSelected none 返回第一个被选中的行或如果没有选中的行则返回null。

var row = $('#dg').datagrid('getSelected');

if (!row) {//没有选中

//提示信息

//                       $.messager.show({

//                                title : '提示信息',

//                                msg : '删除前必须选择一行',

//                                showType : 'fade',

//                                style : {

//                                         right : '',

//                                         bottom : ''

//                                }

//                       });

$.messager.alert('提示信息','删除前必须选择一行!','info');

return;

}

//row代表选中行的json数据

console.debug(row);

$.get("/datagrid_delete.action?id="+row.id,function(data){

if(data.success){//删除成功

//重新加载datagrid:调用datagrid组件的reload方法

//reload param 重载行。等同于'load'方法,但是它将保持在当前页。

$('#dg').datagrid('reload');//类似于原来的$("#domainFrom").submit()

}else{//删除失败

$.messager.alert('错误提示',data.msg,'error');

}

});

}

  1. 新增保存

4.1.  弹出对话框

modal="true" 定义是否将窗体显示为模式化窗口

员工信息
用户名:
密码:
年龄:
邮箱:

4.2.  后台

// 从datagrid页面发出的ajax请求:保存方法

public String save() throws Exception {

Map map = new HashMap();

try {

employeeService.saveOrUpdate(employee);

map.put("success", true);

} catch (Exception e) {

map.put("success", false);

map.put("msg", "异常:" + e.getMessage());

}

putContext("map", map);

return "jsonResult";// 不能返回页面,只能返回json视图===jsonResult

}

// 不需要prepareInput方法,因为不做页面跳转,不做页面回显,前台回显:xxxForm.form('load',rows);

// public void prepareInput() throws Exception {

// }

// java.lang.IllegalArgumentException: attempt to create saveOrUpdate event

// with null entity

// 没有employee = new Employee();

public void prepareSave() throws Exception {

if (id == null) {

employee = new Employee();

} else {

employee = employeeService.get(id);//修改的时候防止数据丢失的

}

}

//显示添加页面

function addEmployee() {

console.debug("add");

//先把对话框里面的表单清空

$('#fm').form('clear');

//弹出一个对话框,修改对话框的标题

$('#dlg').dialog('open').dialog('setTitle','添加员工');

}

4.3.  修改保存

4.3.1.   前台js

//显示回显,修改页面

function editEmployee() {

console.debug("edit");

var row = $('#dg').datagrid('getSelected');

if (!row) {//没有选中

$.messager.alert('提示信息', '修改前必须选择一行!', 'info');

return;

}

//row代表选中行的json数据

console.debug(row);

//先把对话框里面的表单清空

$('#fm').form('clear');

//读取记录填充到表单中。数据参数可以是一个字符串或一个对象类型row,如果是字符串则作为远程URL,否则作为本地记录。

$('#fm').form('load',row);

//弹出一个对话框,修改对话框的标题

$('#dlg').dialog('open').dialog('setTitle','修改员工');

}

4.3.2.   后台action

public void prepareSave() throws Exception {

if (id == null) {// 处理新增

employee = new Employee();// 实例化,把employee放到栈顶

} else {// 处理保存

employee = employeeService.get(id);// 实现数据不丢失

}

}

4.4.  easyui内置验证插件

4.4.1.   单独写属性

class="easyui-validatebox" required="true" validType="email"

使用data-options

class="easyui-validatebox" data-options="required:true,validType:'email'"

必填+email格式

4.4.2.   源码分析

$.map(['validatebox','textbox','passwordbox','filebox','searchbox',

'combo','combobox','combogrid','combotree',

'datebox','datetimebox','numberbox',

'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){

if ($.fn[plugin]){

$.fn[plugin].defaults.missingMessage = '该输入项为必输项';

}

});

if ($.fn.validatebox){

$.fn.validatebox.defaults.rules.email.message = '请输入有效的电子邮件地址';

$.fn.validatebox.defaults.rules.url.message = '请输入有效的URL地址';

$.fn.validatebox.defaults.rules.length.message = '输入内容长度必须介于{0}和{1}之间';

$.fn.validatebox.defaults.rules.remote.message = '请修正该字段';

}}

  1. 显示easyui的后台主页

5.1.  效果

5.2.  Main2Action

/**

*

* easyui后台主页

*

*/

@Controller

@Scope("prototype")

public class Main2Action extends BaseAction {

// 显示后台主页

@Override

public String execute() throws Exception {

return SUCCESS;

}

}

5.3.  struts.xml

/WEB-INF/views/main2.jsp

5.4.  页面

  1. 实现全屏
  2. 实现全屏

1北,图片logo
2南,底部,公司版权信息
3东,一般不要
4西,菜单
5,中,主体内容

5.5.  显示左侧菜单

5.5.1.   显示静态菜单

拷贝easyui1项目里面11.组件三要素-事件.jsp案例部分内容

并且拷贝json文本文件:tree.text

5.5.2.   后台

@Autowired

private IMenuService menuService;

// 从后台主页发出ajax请求,获取菜单的json数据

public String menu() throws Exception {

Employee employee = (Employee) ActionContext.getContext().getSession().get(USER_IN_SESSION);

List

list = menuService.findByLoginUserId(getId());

putContext("map", list);

return "json";

}

5.5.3.         Menu.java

@JSON(serialize = false)

public Menu getParent() {

@JSON(name = "iconCls")

public String getIcon() {

@JSON(name = "text")

public String getName() {       必须重启电脑

5.5.4.   显示动态菜单

5.6.  使用iframe显示点击页面的内容

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="/struts-tags" prefix="s"%>

<link rel="stylesheet" type="text/css"

href="easyui/themes/default/easyui.css">

xxxCRM项目小组

北:logo标记
南,底部,公司认证信息
东,信息提示
西,菜单

jQuery EasyUI framework helps you build your web pages easily.

  • easyui is a collection of user-interface plugin based on jQuery.
  • easyui provides essential functionality for building modem, interactive, javascript applications.
  • using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.
  • complete framework for HTML5 web page.
  • easyui save your time and scales while developing your products.
  • easyui is very easy but powerful.

  1. 处理员工部门

6.1.  后台的Action添加方法

注入部门service

public String deptTree() throws Exception {

// #map

putContext("map", departmentService.getAll());

// 必须返回json视图

//

return "json";

}

6.2.  页面下拉列表

<input id="deptCombobox"  class="easyui-combobox" name="department.id"

data-options="

url:'datagrid_deptTree.action',

valueField: 'id',

textField: 'name'

">

6.3.  回显editEmployee

//表单里面的名称是department.id,row行json里面也有row.department.id

//row:{"age":11,"department":{"id":2,"name":"采购部"},"email":"","id":108,"password":"11","username":"111155"}

//额外处理下拉列表

if(row.department){//如果原来有部门

//row["department.id"]=row.department.id;

$('#deptCombobox').combobox('setValue', row.department.id);

}

6.4.  prepareSave

public void prepareSave() throws Exception {

if (id == null) {

employee = new Employee();

} else {

employee = employeeService.get(id);//修改的时候防止数据丢失的

employee.setDepartment(null);

}

}

6.5.  Save方法

public String save() throws Exception {

Map map = new HashMap();

map.put("success", false);

try {

System.err.println(employee.getDepartment());// not null

System.err.println(employee.getDepartment().getId());// null

Department department = employee.getDepartment();

if (department != null && department.getId() == null) {

employee.setDepartment(null);

}

employeeService.save(employee);

map.put("success", true);

map.put("msg", "保存成功");

} catch (Exception e) {

map.put("msg", "保存出现异常:" + e.getMessage());

}

//

putContext("map", map);

return "json";// 返回json视图

}

  1. 已经学习那些组件

panel,linkbutton,tree(标准的json字符串,兼容easyui:text,iconCls,children)

dialog,datagrid,form

layout,tabs

  1. 课程总结

8.1.  重点

  1. Datagrid crud+分页
  2. Easyui后台主页

8.2.  难点

  1. Js的大小写敏感的问题,json格式问题(如最后不能写,)
  2. 常见异常
  3. {"msg":"``保存出现异常``:Target object must not be null; nested exception is java.lang.IllegalArgumentException: Target object must not be null","success":false}

如果在进行修改的时候

public void prepareSave() throws Exception {

if (id == null) {// 处理新增

employee = new Employee();// 实例化,把employee放到栈顶

} else {// 处理保存

employee = employeeService.get(id);// 实现数据不丢失

}

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章