• km之路--002 easyui 一


    下载地址

    http://download.csdn.net/album/detail/343

    我使用的环境

    操作系统:windows/linux(deepin)

    数据库:mysql 5.6 / mariadb 10.0.x.x

    jdk : 8

    ide : spring tool suite 3.9.2 【不是不想用idea而是频繁的找注册码实在太麻烦了】

    maven : 3.5.2 

    tomcat : 7

    easyui : 1.5.2

    参考资料

    JQuery EasyUI 中文网 : http://www.jeasyui.net/

    http://download.csdn.net/album/detail/343 中的中文文档

    百度及各大论坛等

    Hello World

    目录结构

    代码

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>easyui one</title>
     6     <link type="text/css" rel="stylesheet" href="assets/jquery-easyui-1.5.2/themes/default/easyui.css" />
     7     <link type="text/css" rel="stylesheet" href="assets/jquery-easyui-1.5.2/themes/icon.css" />
     8 </head>
     9 <body>
    10     <a id="btn" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search'">easyui</a>
    11     
    12     <script type="text/javascript" charset="utf-8" src="assets/jquery-2.1.4/jquery.min.js"></script>
    13     <script type="text/javascript" charset="utf-8" src="assets/jquery-easyui-1.5.2/jquery.easyui.min.js"></script>
    14     <script type="text/javascript" charset="utf-8" src="assets/jquery-easyui-1.5.2/locale/easyui-lang-zh_CN.js"></script>
    15     <script type="text/javascript" charset="utf-8">
    16         $(function(){
    17             $('#btn').click(function(){
    18                 $.messager.confirm('确认','您确认删除记录么?',function(r){
    19                     if(r){
    20                         console.log('删除!');
    21                     }else{
    22                         console.log('取消!');
    23                     }
    24                 });
    25             });
    26         });
    27     </script>
    28 </body>
    29 </html>

    easyui 组件依赖关系

    easyui 自定义图标

    推荐使用淘宝的icon库:http://www.iconfont.cn/

    注意下载16 X 16的。然后将你下载的图片放在 jquery-easyui-x.x.x hemesicons中,并在jquery-easyui-x.x.x hemesicon.css中添加如下代码:

    1 /* mine */
    2 .icon-mine-search{
    3     background:url('icons/mine-search.png') no-repeat center center;
    4 }

    效果 :

    panel

    ===最简单的panel

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>easyui one panel</title>
     6     <link type="text/css" rel="stylesheet" href="assets/jquery-easyui-1.5.2/themes/default/easyui.css" />
     7     <link type="text/css" rel="stylesheet" href="assets/jquery-easyui-1.5.2/themes/icon.css" />
     8 </head>
     9 <body>
    10     <div id="panel01"></div>
    11     
    12     <script type="text/javascript" charset="utf-8" src="assets/jquery-2.1.4/jquery.min.js"></script>
    13     <script type="text/javascript" charset="utf-8" src="assets/jquery-easyui-1.5.2/jquery.easyui.min.js"></script>
    14     <script type="text/javascript" charset="utf-8" src="assets/jquery-easyui-1.5.2/locale/easyui-lang-zh_CN.js"></script>
    15     <script type="text/javascript" charset="utf-8">
    16         $(function(){
    17             $('#panel01').panel({
    18                 width : 500,
    19                 height : 150,
    20                 title : '我的面板'
    21                 
    22             });
    23         });
    24     </script>
    25 </body>
    26 </html>

    效果

    ===常用属性

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>easyui one panel</title>
     6     <link type="text/css" rel="stylesheet" href="assets/jquery-easyui-1.5.2/themes/default/easyui.css" />
     7     <link type="text/css" rel="stylesheet" href="assets/jquery-easyui-1.5.2/themes/icon.css" />
     8     <style type="text/css">
     9         #box{
    10             width: 700px;
    11             height: 300px;
    12             margin: 0 auto;
    13             border: 1px solid red;
    14         }
    15     </style>
    16 </head>
    17 <body>
    18    <div id="box">
    19         <div id="panel01"></div>   
    20    </div>
    21     
    22     
    23     <script type="text/javascript" charset="utf-8" src="assets/jquery-2.1.4/jquery.min.js"></script>
    24     <script type="text/javascript" charset="utf-8" src="assets/jquery-easyui-1.5.2/jquery.easyui.min.js"></script>
    25     <script type="text/javascript" charset="utf-8" src="assets/jquery-easyui-1.5.2/locale/easyui-lang-zh_CN.js"></script>
    26     <script type="text/javascript" charset="utf-8">
    27         $(function(){
    28             var panel01 = $('#panel01').panel({
    29                 width : 500,
    30                 height : 150,
    31                 title : '我的面板',
    32                 collapsible : true, // 是否显示可折叠按钮,默认 false
    33                 minimizable : true, // 是否显示最小化按钮,默认 false
    34                 maximizable : true, // 是否显示最大化按钮,false
    35                 closable : true, // 是否显示关闭按钮,默认 fasle
    36                 content : '<h1>Hello World!</h1>',
    37                 onBeforeOpen : function(){
    38                     console.log('onBeforeOpen');
    39                     var self = $(this);
    40                     var parentWidth = self.parent().parent().width();
    41                     var parentHeight = self.parent().parent().height();
    42                     console.log(parentWidth);
    43                     console.log(parentHeight);
    44                     
    45                     var width = self.parent().width();
    46                     var height = self.parent().height();
    47                     
    48                     var left = (parentWidth - width) / 2;
    49                     var top = (parentHeight - height) / 2;
    50                     self.parent().css({
    51                         marginLeft : left,
    52                         marginTop : top
    53                     });
    54                     if( parentHeight < height ){
    55                         self.parent().css({
    56                             marginLeft : left,
    57                             marginTop : 0
    58                         });
    59                     }
    60                 }
    61             });
    62             console.log(panel01.panel('options'));
    63             
    64         });
    65     </script>
    66 </body>
    67 </html>

    效果:

    其中比较重要的是:onBeforeOpen:在打开面板之前触发,返回false可以取消打开操作。

    在这个方法中的代码是进行面板居中操作。参考自:https://www.cnblogs.com/AaronYang/p/3465315.html。不过原代码写的不对,原因如下:

    可以在easyui生成的代码中看到,除了我们自己写的div之外,还增加了一个 <div class="panel-header">和一个<div class='panel panel-htop'>。其中的标签父子关系已经很明显了。原文中设置的是left与top属性,然而<div class='panel panel-htop'>的display属性为:block。

    所以应该修改的是margin-left与margin-top属性。

    ===加载远程数据

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>easyui one panel</title>
     6     <link type="text/css" rel="stylesheet" href="assets/jquery-easyui-1.5.2/themes/default/easyui.css" />
     7     <link type="text/css" rel="stylesheet" href="assets/jquery-easyui-1.5.2/themes/icon.css" />
     8     <style type="text/css">
     9         #box{
    10             width: 700px;
    11             height: 300px;
    12             margin: 0 auto;
    13             border: 1px solid red;
    14         }
    15     </style>
    16 </head>
    17 <body>
    18    <div id="box">
    19         <div id="panel01"></div>   
    20    </div>
    21     
    22     
    23     <script type="text/javascript" charset="utf-8" src="assets/jquery-2.1.4/jquery.min.js"></script>
    24     <script type="text/javascript" charset="utf-8" src="assets/jquery-easyui-1.5.2/jquery.easyui.min.js"></script>
    25     <script type="text/javascript" charset="utf-8" src="assets/jquery-easyui-1.5.2/locale/easyui-lang-zh_CN.js"></script>
    26     <script type="text/javascript" charset="utf-8">
    27         $(function(){
    28             var panel01 = $('#panel01').panel({
    29                 width : 500,
    30                 height : 150,
    31                 title : '我的面板',
    32                 collapsible : true, // 是否显示可折叠按钮,默认 false
    33                 minimizable : true, // 是否显示最小化按钮,默认 false
    34                 maximizable : true, // 是否显示最大化按钮,false
    35                 closable : true, // 是否显示关闭按钮,默认 fasle
    36                 loadingMessage : '正在加载', // 在加载远程数据的时候在面板内显示一条消息。
    37                 cache : false, // 如果为true,在超链接载入时缓存面板内容。
    38                 href : 'panel-href.html',
    39                 
    40             });
    41             
    42         });
    43     </script>
    44 </body>
    45 </html>
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>panel href</title>
     6     <style type="text/css">
     7         p{
     8             color: red;
     9         }
    10     </style>
    11 </head>
    12 <body>
    13     <p>panel 内容!</p>
    14     <script type="text/javascript" charset="utf-8">
    15         $(function(){
    16             console.log('panel 内容!');
    17         });
    18     </script>
    19 </body>
    20 </html>

     效果

    可以看到,panel-href.html中的样式并没有起作用。但是js代码确执行了。这说明panel在加载远程页面的时候,只会加载body体重的内容。解决方式是把CSS代码直接写在body体内或者把link标签写在body体内。而关于把style和link放在body体中会有什么影响,可参考:

    style标签写在body后与body前有什么区别? - 贺师俊的回答 - 知乎 https://www.zhihu.com/question/39840003/answer/181308294

    window

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <title>easyui one window</title>
     7     <link type="text/css" rel="stylesheet" href="assets/jquery-easyui-1.5.2/themes/default/easyui.css" />
     8     <link type="text/css" rel="stylesheet" href="assets/jquery-easyui-1.5.2/themes/icon.css" />
     9     <style type="text/css">
    10         #box {
    11             width: 1200px;
    12             height: 600px;
    13             margin: 0 auto;
    14             border: 1px solid red;
    15         }
    16 
    17     </style>
    18 </head>
    19 
    20 <body>
    21     <div id="box">
    22         <div id="window01"></div>
    23         <div id="window02"></div>
    24         <a id="btn" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-mine-search'">easyui</a>
    25     </div>
    26 
    27 
    28     <script type="text/javascript" charset="utf-8" src="assets/jquery-2.1.4/jquery.min.js"></script>
    29     <script type="text/javascript" charset="utf-8" src="assets/jquery-easyui-1.5.2/jquery.easyui.min.js"></script>
    30     <script type="text/javascript" charset="utf-8" src="assets/jquery-easyui-1.5.2/locale/easyui-lang-zh_CN.js"></script>
    31     <script type="text/javascript" charset="utf-8">
    32         $(function() {
    33             $('#btn').click(function() {
    34                 $.messager.confirm('确认', '您确认删除记录么?', function(r) {
    35                     if (r) {
    36                         console.log('删除!');
    37                     } else {
    38                         console.log('取消!');
    39                     }
    40                 });
    41             });
    42 
    43             var window01 = $('#window01').window({
    44                  300,
    45                 height: 150,
    46                 title: '第一个window',
    47                 collapsible: true, // 是否显示可折叠按钮,默认 false
    48                 minimizable: true, // 是否显示最小化按钮,默认 false
    49                 maximizable: true, // 是否显示最大化按钮,false
    50                 closable: true, // 是否显示关闭按钮,默认 fasle
    51                 loadingMessage: '正在加载', // 在加载远程数据的时候在面板内显示一条消息。
    52                 cache: false, // 如果为true,在超链接载入时缓存面板内容。
    53                 href: 'panel-href.html',
    54                 modal: true, // 定义是否将窗体显示为模式化窗口。默认为:false
    55                 zIndex : 2, // 窗口Z轴坐标。默认:9000
    56                 inline : true, // 定义如何布局窗口,如果设置为true,窗口将显示在它的父容器中,否则将显示在所有元素的上面。默认:fasle
    57                 
    58             });
    59             window01.window('center');
    60             
    61             var window02 = $('#window02').window({
    62                  500,
    63                 height: 250,
    64                 title: '第二个window',
    65                 collapsible: true, // 是否显示可折叠按钮,默认 false
    66                 minimizable: true, // 是否显示最小化按钮,默认 false
    67                 maximizable: true, // 是否显示最大化按钮,false
    68                 closable: true, // 是否显示关闭按钮,默认 fasle
    69                 loadingMessage: '正在加载', // 在加载远程数据的时候在面板内显示一条消息。
    70                 cache: false, // 如果为true,在超链接载入时缓存面板内容。
    71                 href: 'panel-href.html',
    72                 modal: true,
    73                 zIndex : 1,
    74                 border : 'thin' // 定义窗体边框的样式。可用值:true,false,'thin','thick'。(该方法自1.4.5版开始可用)。默认:true
    75             });
    76 
    77         });
    78 
    79     </script>
    80 </body>
    81 
    82 </html>

    效果:

    其中center方法好像没有什么用。

    布局

    easyui中布局有:tabs、accordion、layout这三种方式【没算panel与自己定位position】。我目测这几种布局的每一个方法与属性都很重要,我就不再写摘要了,直接写一个例子好了。

    所有的文件:

    其中student目录中的文件内容与左侧树中的子节点文本相同,不再写出

    index.html

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <title>easyui one</title>
     7     <link type="text/css" rel="stylesheet" href="http://localhost:8081/static/assets/jquery-easyui-1.5.2/themes/default/easyui.css" />
     8     <link type="text/css" rel="stylesheet" href="http://localhost:8081/static/assets/jquery-easyui-1.5.2/themes/icon.css" />
     9     <link type="text/css" rel="stylesheet" href="http://localhost:8081/static/index.css" />
    10 </head>
    11 
    12 <body class="easyui-layout">
    13     <div data-options="region:'north'" style="height:50px;">
    14         <h1 class="banner">学生信息管理系统</h1>
    15         <div class="nav-top">
    16             菜单
    17         </div>
    18     </div>
    19     <div data-options="region:'west',title:'系统菜单',split:true" style="180px;">
    20         <div id="accdion-left" class="easyui-accordion" data-options="fit:true">
    21             <div title="学生管理" data-options="">
    22                 <ul id="stuManagerTree" class="easyui-tree" data-options='lines:true,animate:true'>
    23                     <li>
    24                         <span>基本管理</span>
    25                         <ul>
    26                             <li><span>学生基本信息</span></li>
    27                             <li><span>添加学生</span></li>
    28                             <li><span>成绩查询</span></li>
    29                         </ul>
    30                     </li>
    31                     <li>
    32                         <span>奖惩管理</span>
    33                         <ul>
    34                             <li><span>奖励查询</span></li>
    35                             <li><span>添加奖励</span></li>
    36                             <li><span>处罚查询</span></li>
    37                             <li><span>添加处罚</span></li>
    38                         </ul>
    39                     </li>
    40                 </ul>
    41             </div>
    42             <div title="教师管理" data-options="" style="">
    43                 教师管理
    44             </div>
    45             <div title="课程管理">
    46                 课程管理
    47             </div>
    48         </div>
    49 
    50 
    51     </div>
    52     <div data-options="region:'center',title:'center title'">
    53         <div id="tabs-center" class="easyui-tabs" data-options="fit:true">
    54             <div title="主 页">
    55                 tab1
    56             </div>
    57         </div>
    58     </div>
    59 
    60 
    61     <script type="text/javascript" charset="utf-8" src="http://localhost:8081/static/assets/jquery-2.1.4/jquery.min.js"></script>
    62     <script type="text/javascript" charset="utf-8" src="http://localhost:8081/static/assets/jquery-easyui-1.5.2/jquery.easyui.min.js"></script>
    63     <script type="text/javascript" charset="utf-8" src="http://localhost:8081/static/assets/jquery-easyui-1.5.2/locale/easyui-lang-zh_CN.js"></script>
    64     <script type="text/javascript" charset="utf-8" src="http://localhost:8081/static/assets/js/lib.js"></script>
    65     <script type="text/javascript" charset="utf-8">
    66         $(function() {
    67             var tabsCenter = $('#tabs-center');
    68             var stuManagerTree = $('#stuManagerTree');
    69             stuManagerTree.tree({
    70                 onClick: function(node) {
    71                     if (stuManagerTree.tree('isLeaf', node.target)) {
    72                         var text = node.text;
    73                         if(tabsCenter.tabs('exists',text)){
    74                             tabsCenter.tabs('select',text);
    75                         }else{
    76                             tabsCenter.tabs('add',{
    77                                 title : text,
    78                                 closable : true,
    79                                 href : SM.convertTreeNodeToUrl(text)
    80                             });
    81                         }
    82                     }
    83                 }
    84             });
    85         });
    86 
    87     </script>
    88 </body>
    89 
    90 </html>

    lib.js

     1 var SM = {
     2     /**
     3      * 将树节点中的文本转换为URL
     4      */
     5     convertTreeNodeToUrl: function (nodeText) {
     6         var url = 'http://localhost:8081/static/';
     7         switch (nodeText) {
     8             case '学生基本信息':
     9                 {
    10                     url += 'student/list.html';
    11                     break;
    12                 }
    13             case '添加学生':
    14                 {
    15                     url += 'student/add.html';
    16                     break;
    17                 }
    18             case '成绩查询':
    19                 {
    20                     url += 'student/scoreQuery.html';
    21                     break;
    22                 }
    23             case '奖励查询':
    24                 {
    25                     url += 'student/rewardQuery.html';
    26                     break;
    27                 }
    28             case '添加奖励':
    29                 {
    30                     url += 'student/rewardAdd.html';
    31                     break;
    32                 }
    33             case '处罚查询':
    34                 {
    35                     url += 'student/punishQuery.html';
    36                     break;
    37                 }
    38             case '添加处罚':
    39                 {
    40                     url += 'student/punishAdd.html';
    41                     break;
    42                 }
    43             default:
    44                 {
    45                     url = 'http:localhost:8081';
    46                     break;
    47                 }
    48         }
    49         return url;
    50     }
    51 };

    效果

     现在这个布局只是简单的添加了点击事件,且树是硬编码在代码中的,目前tree组件还不是重点,之后写到了再说。而且easyui的布局确实没办法去写一个摘要,之后用到什么高级功能了再说【比如点击子页面中一个按钮,打开另一个子页面】。

    其中tree组件与tabs的点击事件处理基本流程如下:

    首先判断当前点击是否为叶子节点

    如果是叶子节点,则根据节点的标题判断tabs容器中是否存在

    如果存在

      选中

    如果不存在,

      从node中提取其对应的URL【由于现在还没把tree保存到数据库中,这里用字符串替换】、标题、icon【如果有的话】、closable属性【其实这个可以设置为除了主页之外其它tab页面的closable属性均为true】,

      创建对应的tab页面

      选中

    datagrid开始

    开始datagrid

    快速例子

    本例使用的后台技术为:spring + spring mvc + mybatis,数据库为mysql,使用了mybatis通用mapper,可参考:https://gitee.com/free/Mapper。整体目录结构:

    本想把静态页面与后台代码完全分离的,但是电脑的80端口被大量程序占用,想了想还是算了吧,就不搞那些对本例没用的东西了

    ===pom

    此pom文件是我经常使用的一个,里面有很多东西可以去掉

      1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      3     <modelVersion>4.0.0</modelVersion>
      4     <groupId>com.laolang.easyui</groupId>
      5     <artifactId>easyui-one</artifactId>
      6     <packaging>war</packaging>
      7     <version>0.0.1-SNAPSHOT</version>
      8 
      9     <!-- 集中定义依赖版本号 -->
     10     <properties>
     11         <!-- test -->
     12         <junit.version>4.10</junit.version>
     13         <hamcrest.version>1.3</hamcrest.version>
     14 
     15 
     16         <!-- java ee -->
     17         <javaee-api.version>7.0</javaee-api.version>
     18         <servlet-api.version>3.0.1</servlet-api.version>
     19         <persistence-api.version>1.0</persistence-api.version>
     20         <jstl.version>1.2</jstl.version>
     21         <standard.version>1.1.2</standard.version>
     22 
     23 
     24         <!-- spring -->
     25         <spring.version>4.2.0.RELEASE</spring.version>
     26 
     27         <!-- mybatis -->
     28         <mybatis.version>3.2.8</mybatis.version>
     29         <mybatis.spring.version>1.2.2</mybatis.spring.version>
     30         <mybatis.paginator.version>1.2.15</mybatis.paginator.version>
     31         <pagehelper.version>4.0.3</pagehelper.version>
     32         <tk.mapper.version>3.2.2</tk.mapper.version>
     33 
     34 
     35         <mysql.version>5.1.32</mysql.version>
     36 
     37         <!-- log -->
     38         <slf4j.version>1.7.12</slf4j.version>
     39         <logback.version>1.1.3</logback.version>
     40         <logback.ext.version>0.1.2</logback.ext.version>
     41 
     42         <!-- json -->
     43         <jackson.version>2.4.2</jackson.version>
     44         <jackson.mapper.version>1.9.13</jackson.mapper.version>
     45 
     46         <!-- google -->
     47         <gson.version>2.2.2</gson.version>
     48         <guava.version>18.0</guava.version>
     49 
     50         <!-- alibaba -->
     51         <druid.version>1.0.12</druid.version>
     52 
     53         <!-- ehcache -->
     54         <ehcache.version>2.7.5</ehcache.version>
     55 
     56         <!-- apache -->
     57         <httpclient.version>4.5</httpclient.version>
     58         <commons-lang3.version>3.3.2</commons-lang3.version>
     59         <commons-io.version>2.5</commons-io.version>
     60         <commons-fileupload.version>1.3.2</commons-fileupload.version>
     61         <commons-net.version>3.3</commons-net.version>
     62         <commons-codec.version>1.9</commons-codec.version>
     63 
     64         <!-- beetl -->
     65         <beetl.version>2.7.5</beetl.version>
     66 
     67         <!-- JSR 303 -->
     68         <hibernate-validator.version>5.1.3.Final</hibernate-validator.version>
     69         <validator-api.version>1.1.0.Final</validator-api.version>
     70 
     71         <joda-time.version>2.5</joda-time.version>
     72     </properties>
     73 
     74     <dependencies>
     75         <!-- test -->
     76         <dependency>
     77             <groupId>junit</groupId>
     78             <artifactId>junit</artifactId>
     79             <version>${junit.version}</version>
     80             <scope>test</scope>
     81         </dependency>
     82         <dependency>
     83             <groupId>org.hamcrest</groupId>
     84             <artifactId>hamcrest-all</artifactId>
     85             <version>${hamcrest.version}</version>
     86             <scope>test</scope>
     87         </dependency>
     88 
     89         <!-- java ee -->
     90         <dependency>
     91             <groupId>javax</groupId>
     92             <artifactId>javaee-api</artifactId>
     93             <version>${javaee-api.version}</version>
     94             <scope>provided</scope>
     95         </dependency>
     96         <dependency>
     97             <groupId>javax.servlet</groupId>
     98             <artifactId>javax.servlet-api</artifactId>
     99             <version>${servlet-api.version}</version>
    100             <scope>provided</scope>
    101         </dependency>
    102         <dependency>
    103             <groupId>javax.persistence</groupId>
    104             <artifactId>persistence-api</artifactId>
    105             <version>1.0</version>
    106         </dependency>
    107         <dependency>
    108             <groupId>jstl</groupId>
    109             <artifactId>jstl</artifactId>
    110             <version>${jstl.version}</version>
    111         </dependency>
    112         <dependency>
    113             <groupId>taglibs</groupId>
    114             <artifactId>standard</artifactId>
    115             <version>${standard.version}</version>
    116         </dependency>
    117 
    118         <!-- Spring -->
    119         <dependency>
    120             <groupId>org.springframework</groupId>
    121             <artifactId>spring-context</artifactId>
    122             <version>${spring.version}</version>
    123         </dependency>
    124         <dependency>
    125             <groupId>org.springframework</groupId>
    126             <artifactId>spring-oxm</artifactId>
    127             <version>${spring.version}</version>
    128         </dependency>
    129         <dependency>
    130             <groupId>org.springframework</groupId>
    131             <artifactId>spring-tx</artifactId>
    132             <version>${spring.version}</version>
    133         </dependency>
    134         <dependency>
    135             <groupId>org.springframework</groupId>
    136             <artifactId>spring-jdbc</artifactId>
    137             <version>${spring.version}</version>
    138         </dependency>
    139         <dependency>
    140             <groupId>org.springframework</groupId>
    141             <artifactId>spring-beans</artifactId>
    142             <version>${spring.version}</version>
    143         </dependency>
    144         <dependency>
    145             <groupId>org.springframework</groupId>
    146             <artifactId>spring-aop</artifactId>
    147             <version>${spring.version}</version>
    148         </dependency>
    149         <dependency>
    150             <groupId>org.springframework</groupId>
    151             <artifactId>spring-test</artifactId>
    152             <version>${spring.version}</version>
    153         </dependency>
    154         <dependency>
    155             <groupId>org.springframework</groupId>
    156             <artifactId>spring-aspects</artifactId>
    157             <version>${spring.version}</version>
    158         </dependency>
    159         <dependency>
    160             <groupId>org.springframework</groupId>
    161             <artifactId>spring-web</artifactId>
    162             <version>${spring.version}</version>
    163         </dependency>
    164         <dependency>
    165             <groupId>org.springframework</groupId>
    166             <artifactId>spring-webmvc</artifactId>
    167             <version>${spring.version}</version>
    168         </dependency>
    169         <dependency>
    170             <groupId>org.springframework</groupId>
    171             <artifactId>spring-core</artifactId>
    172             <version>${spring.version}</version>
    173         </dependency>
    174         <!--<dependency> -->
    175         <!--<groupId>org.springframework</groupId> -->
    176         <!--<artifactId>spring-jms</artifactId> -->
    177         <!--</dependency> -->
    178         <!--<dependency> -->
    179         <!--<groupId>org.springframework</groupId> -->
    180         <!--<artifactId>spring-context-support</artifactId> -->
    181         <!--</dependency> -->
    182 
    183 
    184 
    185         <!-- JSR 303 -->
    186         <dependency>
    187             <groupId>javax.validation</groupId>
    188             <artifactId>validation-api</artifactId>
    189             <version>${validator-api.version}</version>
    190         </dependency>
    191 
    192         <dependency>
    193             <groupId>org.hibernate</groupId>
    194             <artifactId>hibernate-validator</artifactId>
    195             <version>${hibernate-validator.version}</version>
    196         </dependency>
    197 
    198 
    199         <!-- beetl -->
    200         <dependency>
    201             <groupId>com.ibeetl</groupId>
    202             <artifactId>beetl</artifactId>
    203             <version>${beetl.version}</version>
    204         </dependency>
    205 
    206         <!-- Mybatis -->
    207         <dependency>
    208             <groupId>org.mybatis</groupId>
    209             <artifactId>mybatis</artifactId>
    210             <version>${mybatis.version}</version>
    211         </dependency>
    212         <dependency>
    213             <groupId>org.mybatis</groupId>
    214             <artifactId>mybatis-spring</artifactId>
    215             <version>${mybatis.spring.version}</version>
    216         </dependency>
    217         <dependency>
    218             <groupId>com.github.pagehelper</groupId>
    219             <artifactId>pagehelper</artifactId>
    220             <version>${pagehelper.version}</version>
    221         </dependency>
    222         <dependency>
    223             <groupId>tk.mybatis</groupId>
    224             <artifactId>mapper</artifactId>
    225             <version>${tk.mapper.version}</version>
    226         </dependency>
    227 
    228 
    229         <!-- MySql -->
    230         <dependency>
    231             <groupId>mysql</groupId>
    232             <artifactId>mysql-connector-java</artifactId>
    233             <version>${mysql.version}</version>
    234         </dependency>
    235 
    236         <!-- alibaba -->
    237         <dependency>
    238             <groupId>com.alibaba</groupId>
    239             <artifactId>druid</artifactId>
    240             <version>${druid.version}</version>
    241         </dependency>
    242 
    243         <!-- Jackson Json处理工具包 -->
    244         <dependency>
    245             <groupId>org.codehaus.jackson</groupId>
    246             <artifactId>jackson-mapper-asl</artifactId>
    247             <version>${jackson.mapper.version}</version>
    248         </dependency>
    249         <dependency>
    250             <groupId>com.fasterxml.jackson.core</groupId>
    251             <artifactId>jackson-core</artifactId>
    252             <version>${jackson.version}</version>
    253         </dependency>
    254         <dependency>
    255             <groupId>com.fasterxml.jackson.core</groupId>
    256             <artifactId>jackson-databind</artifactId>
    257             <version>${jackson.version}</version>
    258         </dependency>
    259         <dependency>
    260             <groupId>com.fasterxml.jackson.core</groupId>
    261             <artifactId>jackson-annotations</artifactId>
    262             <version>${jackson.version}</version>
    263         </dependency>
    264 
    265         <!-- google -->
    266         <dependency>
    267             <groupId>com.google.code.gson</groupId>
    268             <artifactId>gson</artifactId>
    269             <version>${gson.version}</version>
    270         </dependency>
    271         <dependency>
    272             <groupId>com.google.guava</groupId>
    273             <artifactId>guava</artifactId>
    274             <version>${guava.version}</version>
    275         </dependency>
    276 
    277 
    278         <!-- apache -->
    279         <dependency>
    280             <groupId>org.apache.commons</groupId>
    281             <artifactId>commons-lang3</artifactId>
    282             <version>${commons-lang3.version}</version>
    283         </dependency>
    284         <dependency>
    285             <groupId>commons-io</groupId>
    286             <artifactId>commons-io</artifactId>
    287             <version>${commons-io.version}</version>
    288         </dependency>
    289         <dependency>
    290             <groupId>commons-fileupload</groupId>
    291             <artifactId>commons-fileupload</artifactId>
    292             <version>${commons-fileupload.version}</version>
    293         </dependency>
    294         <dependency>
    295             <groupId>org.apache.httpcomponents</groupId>
    296             <artifactId>httpclient</artifactId>
    297             <version>${httpclient.version}</version>
    298         </dependency>
    299         <dependency>
    300             <groupId>commons-net</groupId>
    301             <artifactId>commons-net</artifactId>
    302             <version>${commons-net.version}</version>
    303         </dependency>
    304         <dependency>
    305             <groupId>commons-codec</groupId>
    306             <artifactId>commons-codec</artifactId>
    307             <version>${commons-codec.version}</version>
    308         </dependency>
    309 
    310 
    311 
    312 
    313         <!-- logback -->
    314         <dependency>
    315             <groupId>org.slf4j</groupId>
    316             <artifactId>slf4j-api</artifactId>
    317             <version>${slf4j.version}</version>
    318         </dependency>
    319         <dependency>
    320             <groupId>org.slf4j</groupId>
    321             <artifactId>jcl-over-slf4j</artifactId>
    322             <version>${slf4j.version}</version>
    323         </dependency>
    324         <dependency>
    325             <groupId>ch.qos.logback</groupId>
    326             <artifactId>logback-core</artifactId>
    327             <version>${logback.version}</version>
    328         </dependency>
    329         <dependency>
    330             <groupId>ch.qos.logback</groupId>
    331             <artifactId>logback-classic</artifactId>
    332             <version>${logback.version}</version>
    333         </dependency>
    334         <dependency>
    335             <groupId>org.logback-extensions</groupId>
    336             <artifactId>logback-ext-spring</artifactId>
    337             <version>${logback.ext.version}</version>
    338         </dependency>
    339 
    340 
    341         <!-- 时间操作组件 -->
    342         <dependency>
    343             <groupId>joda-time</groupId>
    344             <artifactId>joda-time</artifactId>
    345             <version>${joda-time.version}</version>
    346         </dependency>
    347 
    348 
    349 
    350 
    351     </dependencies>
    352 
    353     <build>
    354         <finalName>${project.artifactId}</finalName>
    355         <plugins>
    356             <!-- 资源文件拷贝插件 -->
    357             <plugin>
    358                 <groupId>org.apache.maven.plugins</groupId>
    359                 <artifactId>maven-resources-plugin</artifactId>
    360                 <version>2.7</version>
    361                 <configuration>
    362                     <encoding>UTF-8</encoding>
    363                 </configuration>
    364             </plugin>
    365             <!-- java编译插件 -->
    366             <plugin>
    367                 <groupId>org.apache.maven.plugins</groupId>
    368                 <artifactId>maven-compiler-plugin</artifactId>
    369                 <version>3.2</version>
    370                 <configuration>
    371                     <source>1.7</source>
    372                     <target>1.7</target>
    373                     <encoding>UTF-8</encoding>
    374                 </configuration>
    375             </plugin>
    376             <!-- 运行 java 类 -->
    377             <!-- 必须先使用 mvc compile 编译 -->
    378             <!-- mvn exec:java -->
    379             <plugin>
    380                 <groupId>org.codehaus.mojo</groupId>
    381                 <artifactId>exec-maven-plugin</artifactId>
    382                 <version>1.4.0</version>
    383             </plugin>
    384             
    385             <!-- 配置Tomcat插件 -->
    386             <plugin>
    387                 <groupId>org.apache.tomcat.maven</groupId>
    388                 <artifactId>tomcat7-maven-plugin</artifactId>
    389                 <version>2.2</version>
    390                 <configuration>
    391                     <port>8081</port>
    392                     <path>/</path>
    393                     <!-- 防止GET中文乱码 -->
    394                     <uriEncoding>UTF-8</uriEncoding>
    395                 </configuration>
    396             </plugin>
    397         </plugins>
    398     </build>
    399 
    400 
    401 </project>

    ===controller

     1     @RequestMapping(value="list",method = RequestMethod.GET, produces = "application/json; charset=utf-8")
     2     public ResponseEntity<EasyuiGridListPojo<Student>> findPageList(@RequestParam(name = "page", defaultValue = "1") Integer page,
     3             @RequestParam(name = "rows", defaultValue = "10") Integer size,Student record){
     4         try {
     5             PageInfo<Student> pageInfo = studentService.findPageListByWhere(page, size, record);
     6             List<Student> students = pageInfo.getList();
     7             EasyuiGridListPojo<Student> easyuiGridListPojo = new EasyuiGridListPojo<>();
     8             easyuiGridListPojo.setRows(students);
     9             easyuiGridListPojo.setTotal(pageInfo.getTotal());
    10             return ResponseEntity.ok(easyuiGridListPojo);
    11         }catch(Exception e) {
    12             
    13         }
    14         
    15         return ResponseEntity.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).body(null);
    16     }


    ===EasyuiGridListPojo

     1 package com.laolang.easyui.one.pojo;
     2 
     3 import java.util.List;
     4 
     5 public class EasyuiGridListPojo<T> {
     6         // 空构造函数,getter,setter,tostring等省略
     7     
     8 
     9     private Long total;
    10 
    11     private List<T> rows;
    12 }

    ===BaseDomain

     1 package com.laolang.easyui.one.domain;
     2 
     3 import com.fasterxml.jackson.annotation.JsonFormat;
     4 
     5 import java.util.Date;
     6 
     7 /**
     8  * 实体类基类
     9  * @author laolang2016
    10  * @version 1.0
    11  */
    12 public class BaseDomain {
    13 
    14    // 省略 getter,setter
    15 
    16     /**
    17      * 创建时间
    18      */
    19     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    20     protected Date created;
    21 
    22     /**
    23      * 最后更新时间
    24      */
    25     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    26     protected Date updated;
    27 
    28 
    29 
    30 
    31 
    32 }

    ===Student

     1 package com.laolang.easyui.one.domain;
     2 
     3 import javax.persistence.*;
     4 
     5 import com.fasterxml.jackson.annotation.JsonFormat;
     6 
     7 import java.util.Date;
     8 
     9 @Table(name = "tb_student")
    10 public class Student extends BaseDomain {
    11 
    12     // 空构造器,getter,setter,tostring等省略
    13 
    14     /**
    15      * ID
    16      */
    17     @Id
    18     @GeneratedValue(strategy = GenerationType.IDENTITY)
    19     private Long id;
    20 
    21     /**
    22      * 学号
    23      */
    24     @Column(name = "s_number")
    25     private String sNumber;
    26 
    27     /**
    28      * 姓名
    29      */
    30     private String name;
    31 
    32     /**
    33      * 身份证号
    34      */
    35     @Column(name = "id_number")
    36     private String idNumber;
    37 
    38     /**
    39      * 出生日期
    40      */
    41     @JsonFormat(pattern = "yyyy-MM-dd")
    42     private Date birthday;
    43 
    44     /**
    45      * 性别
    46      */
    47     private String sex;
    48 
    49     /**
    50      * 头像地址
    51      */
    52     @Column(name = "head_pic")
    53     private String headPic;
    54 
    55     /**
    56      * 密码
    57      */
    58     private String pwd;
    59 
    60     /**
    61      * 所在班级ID
    62      */
    63     @Column(name = "classes_Id")
    64     private Long classesId;
    65 
    66 }

    ===html

    接上面的布局代码,将student/list.html修改为如下代码:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>student list</title>
     6 </head>
     7 <body>
     8    <div class="easyui-layout" data-options="fit:true">
     9        <div region="north" title="复杂查询" data-options="height:150,collapsible:true,collapsed:true">
    10            复杂查询
    11        </div>
    12        <div region="center" >
    13            <table id="studentListTable" data-options="fit:true"></table>
    14        </div>
    15    </div>
    16     <script type="text/javascript" charset="utf-8">
    17         $(function(){
    18             // 初始化表格
    19             $('#studentListTable').datagrid({
    20                 url : SM.url.student.list,
    21                 title : '学生基本信息',
    22                 pagination : true, // 如果为true,则在DataGrid控件底部显示分页工具栏。默认:false
    23                 pageSize : 25, // 在设置分页属性的时候初始化页面大小。默认:10
    24                 pageList : [25,50,100], // 在设置分页属性的时候 初始化页面大小选择列表。默认:[10,20,30,40,50]。注意:此列表中的数字必须为pageSize的整数倍
    25                 idField : 'id', // 指明哪一个字段是标识字段。
    26                 method : 'get', // 该方法类型请求远程数据。默认:post
    27                 rownumbers : true, // 如果为true,则显示一个行号列。默认:false,
    28                 striped : true, // 是否显示斑马线效果。默认:false
    29                 fit : true,
    30                 columns : [[{
    31                     title : 'id',
    32                     field : 'id',
    33                     width : 100,
    34                     hidden : true
    35                 },{
    36                     title : '学号',
    37                     field : 'sNumber',
    38                     width : 100,
    39                     checkbox : true
    40                 },{
    41                     title : '姓名',
    42                     field : 'name',
    43                     width : 100
    44                 },{
    45                     title : '身份证号',
    46                     field : 'idNumber',
    47                     width : 125
    48                 },{
    49                     title : '出生日期',
    50                     field : 'birthday',
    51                     width : 100
    52                 },{
    53                     title : '性别',
    54                     field : 'sex',
    55                     width : 100,
    56                     formatter : function(value,row,index){
    57                         return SM.convertStudentSex(value);
    58                     }
    59                 },{
    60                     title : '头像',
    61                     field : 'headPic',
    62                     width : 100
    63                 },{
    64                     title : '所属性班级编号',
    65                     field : 'classesId',
    66                     width : 100
    67                 }]],
    68                 toolbar : [ {
    69                     text : '增加',
    70                     iconCls : 'icon-add',
    71                     handler : function() {
    72 
    73                     }
    74                 },'-',{
    75                     text: '删除',
    76                     iconCls : 'icon-remove',
    77                     handler : function(){
    78                         
    79                     }
    80                 },'-',{
    81                     text : '修改',
    82                     iconCls : 'icon-edit',
    83                     handler : function(){
    84                         
    85                     }
    86                 }]
    87                 
    88             });
    89         });
    90     </script>
    91 </body>
    92 </html>

    ===SM.convertStudentSex

     1 /**
     2 * 格式化学生性别信息
     3 */
     4 convertStudentSex : function( sex ){
     5     if( 'MAIL' === sex  ){
     6         return '男';
     7     }else if(  'FAMAIL' === sex ){
     8         return '女';
     9     }
    10 }

    ===sql

     1 CREATE TABLE `tb_student` (
     2   `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '学生ID',
     3     `name` varchar(20) NOT NULL comment '学生姓名',
     4     s_number varchar(20) NOT NULL UNIQUE comment '学号',
     5     id_number varchar(25) NOT NULL UNIQUE comment '身份证号',
     6     birthday date NOT NULL comment '出生日期',
     7     sex varchar(10) NOT NULL default 'MAIL' comment '性别。MAIL男,FAMIAL:女',
     8     head_pic varchar(150) DEFAULT NULL comment '头像地址',
     9     pwd varchar(30) NOT NULL comment '密码',
    10     classes_id bigint(11) comment '所在班级ID',
    11   `created` datetime DEFAULT NULL COMMENT '创建时间',
    12   `updated` datetime DEFAULT NULL COMMENT '更新时间',
    13   PRIMARY KEY (`id`)
    14   
    15 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='学生表';

    ===生成测试数据的代码

     1 <!DOCTYPE html>
     2 <html lang="zh-CN">
     3 <head>
     4     <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/> 
     5     <title>Document</title>
     6 </head>
     7 <body>
     8     
     9 </body>
    10 <script type="text/javascript" charset="utf-8">
    11     window.onload = function(){
    12         var createStudentSql = function(){
    13             var sql = "INSERT INTO `tb_student` (`name`,s_number,id_number,birthday,sex,pwd,classes_id,created,updated) VALUES (";
    14             var i = 1;
    15             for( i = 1; i <= 456; i++ ){
    16                 sql += "'" + createName(i) + "',";
    17                 sql += "'" + createSnumber(i) + "',";
    18                 sql += "'" + createIdNumber(i) + "',";
    19                 sql += "'1991-12-06',";
    20                 if( 0 === i % 3 ){
    21                     sql += "'MAIL',";
    22                 }else{
    23                     sql += "'FAMAIL',";
    24                 }
    25                 sql += "'123465',";
    26                 var classesId = i % 4 + 1;
    27                 sql +=classesId + ",";
    28                 sql += "'2017-12-30 05:33:25', '2017-12-30 05:33:25');";
    29                 console.log(sql);
    30                 sql = "INSERT INTO `tb_student` (`name`,s_number,id_number,birthday,sex,pwd,classes_id,created,updated) VALUES (";
    31                 
    32             }
    33         }
    34 //        INSERT INTO `tb_student` (`name`,s_number,id_number,birthday,sex,pwd,classes_id,created,updated)
    35 //VALUES ('小代码', '1002', '4105221002', '1991-12-06', 'MAIL',  '123456', '1', '2017-12-30 05:33:25', '2017-12-30 05:33:25'),
    36         function createName( i ){
    37             var name = 'xiaodaima_' + i;
    38             return name;
    39         }
    40         
    41         function createSnumber( i ){            
    42             var sNumber = 1000 + i;
    43             return sNumber;
    44         }
    45         
    46         function createIdNumber( i ){            
    47             var idNumber = 4105221000 + i ;
    48             return idNumber;
    49         }
    50         
    51         
    52         
    53         createStudentSql();
    54     };
    55 </script>
    56 </html>

    原本想用java写的,但是电脑忽然抽风,可以运行maven tomcat 插件,无法运行java main方法,且不知道什么原因,这个html文件输出中文的时候总是乱码,就先这么地吧。

    ===效果

    ===注意事项

    1. 默认method为post,要根据实际情况进行修改

    2. idField是否设置需要考虑清楚。因为这涉及到翻页选择的问题。

    3. 注意pageSize与pageList的关系,pageList中的每一个值都是pageSize的整数倍

    4. 传给datagreid的数据必须要有total与rows属性,其中total为数据库表的总记录数,rows为本次查询出的数据,具体原因:

    在datagrid的属性中,有这样一个属性:loadFilter,其解释为:

     1 返回过滤数据显示。该函数带一个参数'data'用来指向源数据(即:获取的数据源,比如Json对象)。您可以改变源数据的标准数据格式。这个函数必须返回包含'total'和'rows'属性的标准数据对象。 
     2 代码示例:
     3 
     4 // 从Web Service(asp.net、java、php等)输出的JSON对象中移除'd'对象
     5 $('#dg').datagrid({
     6     loadFilter: function(data){
     7         if (data.d){
     8             return data.d;
     9         } else {
    10             return data;
    11         }
    12     }
    13 });

     这个属性的说明其实已经非常明确的解释了datagrid接收json数据的结构。这也就是说我们返回的json数据结构是可以自定义的,不一定必须包含total与rows,但是最终交给datagrid去渲染数据的时候,必须要满足如下结构:

    1 {
    2     total : 123, // 当前表中总记录数
    3     rows : [{ // 当前页数据
    4         ...
    5     },{
    6         ...
    7     }]
    8 }

    5. 复选框选项加在第一个显示的属性上即可

    ===BUG

    我在datagrid上添加了一个面板,默认是折叠起来的,但是运行之后标题无法显示。解决方案已经找到,原因还不知道

    参考:https://www.cnblogs.com/hxling/p/4022244.html

    khl
  • 相关阅读:
    Python Day7(相关补充)
    Python Day7
    Python Day6
    Python Day5
    Python Day4
    Python Day3
    Python Day2
    Python Day1
    复杂装饰器原理分析
    Unity 坐标
  • 原文地址:https://www.cnblogs.com/khlbat/p/8146977.html
Copyright © 2020-2023  润新知