easyUI 学习

)省份-城市-区域三级联动【struts2 + ajax +非数据库版】

   (1)省份-城市-区域,基于jQuery的AJAX三级联动,用Struts2整合AJAX【非数据库版】

        $.ajax(

                {

                       type:"POST",

                       url:"${pageContext.request.contextPath}/findCityByProvinceRequest?id="+new Date().getTime(),

                       data:{"province":province},

                       success:function(backData,textStatus,ajax){}

            }

        );

        注意:上面的每个key值不能乱写

   <select id="province">

      <option>选择省份</option>

      <option>广东</option>

      <option>湖南</option>

   </select>

   <select id="city">

      <option>选择城市</option>

   </select>

       

<script type="text/javascript">

      $("#province").change(function(){

          //删除原城市下拉框中的内容,除第一项外

          $("#city option:gt(0)").remove();

          var province = $("#province option:selected").text();

          if("选择省份" != province){

             $.ajax({

                "type":"POST",

                "url":"${pageContext.request.contextPath}/findCityByProvince?time="+new Date().getTime(),

                "sendData":{"province":province},

                "success":function(backData,textStatus,ajax){

                   //js对象

                   var city = backData.cityList;

                   //jquery对象

                   var $city = $(city);

                   //each()

                   $city.each(function(){

                       //this表示每个城市

                       var $option = $("<option>" + this + "</option>");

                       $("#city").append( $option );

                   });

                }

             });

          }

      });

   </script>

       

public class ProvinceCityAction extends ActionSupport{

   private String province;//广东

   public void setProvince(String province) {

      this.province = province;

   }

   public String findCityByProvince() throws Exception {

      cityList = new ArrayList<String>();

      if("广东".equals(province)){

          cityList.add("湛江");

          cityList.add("汕头");

      }else if("湖南".equals(province)){

          cityList.add("邵阳");

          cityList.add("浏阳");

      }

      return "ok";

   }

   private List<String> cityList;

   public List<String> getCityList() {

      return cityList;

   }

   /**

    * var backData = {

    *                "cityList":["邵阳","浏阳"]

    *             }

    */

}

       

<struts>

 

   <package name="timePackage" extends="json-default" namespace="/">

      

       <global-results>

          <result name="ok" type="json"/>

       </global-results>

 

      <!-- 获取服务端时间 -->

       <action

          name="loadTimeRequest"

          class="cn.itcast.javaee.js.time.TimeAction"

          method="loadTimeMethod"/>

 

      <!-- 检查用户名和密码是否存在 -->

       <action

          name="checkRequest"

          class="cn.itcast.javaee.js.register.RegisterAction"

          method="checkMethod"/>

         

       <!-- 根据省份查询城市 -->

       <action

          name="findCityByProvince"

          class="cn.itcast.javaee.js.provincecity.ProvinceCityAction"

          method="findCityByProvince"/>

 

   </package>

 

</struts>

二)学会查阅文档,使用jQuery-EasyUI,构建自已的Web页面

   (1)网址:www.jeasyui.com,下载并参考学习<<jQuery EasyUI v1.3.5官方API中文版.exe>>手册

   (2)什么是jQuery-EasyUI

        参见<<什么是EasyUI.JPG>>

        是一种第三方组织开发的一款基于jQuery的,简单易用的,功能强大的

WEB[后台前端]JavaScript现成的组件库

        注意:今天的EasyUI组件库的版本较高,需要高版本浏览器支持,

中低版本浏览器会有不能正常执行的情况

   (3)JavaScript,AJAX,JSON,jQuery,EasyUI分别能解决什么问题

            JS:基于浏览器对web页面中的节点进行操作,比较麻烦

            jQuery:基于浏览器简化对web页面中的节点进行操作,做到了write less do more

            AJAX:基于浏览器与服务端进行局部刷新的异步通讯编程模式

            JSON:简化自定义对象的创建与AJAX数据交换轻量级文本

            EasyUI:快速基于现成的组件创建自已的web页面

组件:是指已经由第三方开源组织写好的,直接可以使用的功能界面,例如:form,layout,tree...

     注意:我们学的都是零散的组件,项目中需要将其装配起来,方可构建完整的web页面,

EasyUI只是众多前端WEB组件之一

   (4)jQuery-EasyUI快速入门----可折叠功能的面板

        第一步:创建一个js-day05这么一个web工程

        第二步:在WebRoot目录下创建00-base.html

        第三步:在WebRoot目录下创建js和themes目录,导入官方文件

参见<< jquery-easyui-1.3.6文件夹>>

        第四步:在00-base.html 文件的<head>标签中引入如下文件

    <!-- 引入外部CSS文件 -->

    <link rel="stylesheet" href="../themes/icon.css" type="text/css"></link>

    <link rel="stylesheet" href="../themes/default/easyui.css" type="text/css"></link>

 

    <!-- 引入外部JS文件 -->

    <script type="text/javascript" src="../js/jquery.min.js"></script>

    <script type="text/javascript" src="../js/jquery.easyui.min.js"></script>

        第五步:在00-base.html 文件的<body>标签中创建如下<div>标签

   <div

      id="p"

      class="easyui-panel"

      style="width:500px;height:200px;padding:10px;"  

        title="我的面板"

        iconCls="icon-save"

        collapsible="true">  

       内容<br/>

       内容<br/>

       内容<br/>

       内容<br/>

   </div>

   (5)EasyUI组件

(01)   layout布局

    <!-- 布局面板 -->

     <div data-options="fit:true" id="cc" class="easyui-layout" style="width:600px;height:400px;">  

       <!-- 区域面板 -->

       <div data-options="region:'north',title:'北',split:false,collapsible:true" style="height:100px;"></div>  

       <div data-options="region:'south',title:'南',split:false,collapsible:true" style="height:100px;"></div>  

       <div data-options="region:'east',title:'东',split:false,collapsible:false,minWidth:150,maxWidth:150" style="width:100px;"></div>  

       <div data-options="region:'west',title:'西',split:false,collapsible:false,minWidth:150,maxWidth:150" style="width:100px;"></div>  

       <div data-options="region:'center',title:'中',iconCls:'icon-reload',href:'/js-day05/06_image.html',collapsible:false" style="padding:5px;background:#eee;"></div>  

    </div>

            

<script type="text/javascript">

      //浏览器加载web页面时触发

      $(function(){

         

          //将北边面板折叠,字符串双引单引均可

         $('#cc').layout('collapse','north');

         

          //休息3秒

          window.setTimeout(function(){

 

             //将南边面板折叠,字符串双引单引均可

             $('#cc').layout('collapse','south');

         

          },"3000");

 

      });

   </script>

             

  <body class="easyui-layout">

      <!-- 北 -->

      <div data-options="region:'north'" style="height:150px"></div>

       <!-- 中 -->

       <div data-options="region:'center'">

          <!-- 将中拆分边西和中二部份 -->

       <div class="easyui-layout" data-options="fit:true">

          <!-- 东 -->

          <div data-options="region:'west'" style="width:200px"></div>

          <!-- 中 -->

          <div data-options="region:'center'"></div>

       </div>

       </div>

  </body>

       (02)accordion分类

      <!-- 容器 -->

      <div data-options="border:true,animate:true,multiple:false,selected:-1" id="aa" class="easyui-accordion" style="width:300px;height:500px;">  

         

          <!-- 面板 -->

          <div title="Title1" data-options="iconCls:'icon-save'" style="overflow:auto;padding:10px;">  

             内容1     

          </div>  

          <div title="Title2" data-options="iconCls:'icon-reload'" style="padding:10px;">  

              内容2

          </div>  

          <div title="Title3" data-options="iconCls:'icon-reload',collapsible:true">  

              内容3

          </div>  

         

      </div>

            

<script type="text/javascript">

          $(function(){

             //增加一个面板

             $("#aa").accordion("add",{

                "title":"Title4",

                "content":"内容4",

                "selected":false,

                "iconCls":"icon-search"

             });

            

             //休息3秒

             window.setTimeout(function(){

               

                //删除4号面板

                $("#aa").accordion("remove",3);

               

                //取消选择1号面板

                $("#aa").accordion("unselect",0);

               

             },"3000");

          });

      </script>

(3)linkbutton按钮

      <a id="btn-add" class="easyui-linkbutton" data-options="iconCls:'icon-add'">

          增加

      </a>

      <a id="btn-find" class="easyui-linkbutton" data-options="iconCls:'icon-search'">

          查询

      </a>

      <a id="btn-update" class="easyui-linkbutton" data-options="iconCls:'icon-edit'">

          修改

      </a>

      <a id="btn-delete" class="easyui-linkbutton" data-options="iconCls:'icon-remove'">

          删除

      </a>

     

      <script type="text/javascript">

         

          /*

          $("#btn-add").click(function(){

             //将该按失效

             $("#btn-add").linkbutton("disable");

          });

          $("#btn-add").dblclick(function(){

             //将该按失效

             $("#btn-add").linkbutton("disable");

          });

          */

         

          //参数一:字符串类型的事件,多个事件之间通过空格分隔,事件名称符合jquery事件名写法

          //参数二:处理函数

          $("#btn-add").bind("click dblclick",function(){

             //将该按失效

             $("#btn-add").linkbutton("disable");

          });

         

      </script>

       (04)tabs选项卡

<!-- 容器面板 -->

      <div

          id="tt"

          class="easyui-tabs"

          style="width:500px;height:250px;"

         data-options="plain:false,border:true,tools:[{

                iconCls:'icon-add',

                handler:function(){

                   alert('添加')

                }

          },{

                iconCls:'icon-remove',

                handler:function(){

                   alert('删除')

                }

          }],selected:-1">  

         

          <!-- 选项卡面板 -->

          <div title="Tab1" data-options="closable:true" style="padding:20px">  

              tab1   

          </div>  

          <div title="Tab2" data-options="closable:true" style="overflow:auto;padding:20px;">  

              tab2   

          </div>  

          <div title="Tab3" data-options="iconCls:'icon-reload',closable:true" style="padding:20px;">  

              tab3   

          </div>  

         

      </div>

            

<script type="text/javascript">

          $(document).ready(function(){

             $("#tt").tabs("add",{

                "title":"Tab4",

                "content":"tab4",

                "selected":false,

                "closable":true

             });

          });

      </script>

            

<script type="text/javascript">

    

      //定位四个按钮,同时添加单击事件

      $("a").click(function(){

          //获取按钮的文本

          var tip = $(this).text();

          //去空格

          tip = $.trim(tip);

          //如果是"增加部门"

         if("增加部门" == tip){

             //是否已有相同的tabs选项卡打开

             var flag = $("#tt").tabs("exists",tip);

             //如果不存在相同的tabs选项卡打开

            if(!flag){

                //创建一个tabs选项卡

               $("#tt").tabs("add",{

                   "title":tip,

                   "href":"${pageContext.request.contextPath}/addGroup.jsp",

                   "selected":true,

                   "closable":true

                });

             }

          }

      });

    

    </script>

       (05)pagination分页框

   <!--

      total:记录总数100

      pageSize:每页显示多少条记录5

      pageNumber:当前页号1

      pageList:[5,10,15]表示可供选择中每页显示多少条记录,

                     注意:pageSize的值必须是pageList数组值之一

    -->  

   <div

      id="pp"

      class="easyui-pagination"

      data-options="total:100,pageSize:5,pageNumber:1,pageList:[5,10,15],showPageList:true,showRefresh:false,afterPageText:'页'"

      style="background:#efefef;border:1px solid #ccc;width:400px">

   </div>

            

   <script type="text/javascript">

      $("#pp").pagination({

          //pageNumber当前页号,例如1

          //pageSize获取多少条记录,例如:5

          //以上二个参数,需要谁,就接收谁,不一定二个都同时出现,参数名可以任意

         "onSelectPage":function(pageNumber,pageSize){

             alert(pageNumber + ":" + pageSize);

          }

      });

   </script>

一)学会查阅文档,使用jQuery-EasyUI,构建自已的Web页面

   (1)网址:www.jeasyui.com,下载并参考学习<<jQuery EasyUI v1.3.5官方API中文版.exe>>手册

   (2)什么是jQuery-EasyUI

        参见<<什么是EasyUI.JPG>>

        是一种第三方组织开发的一款基于jQuery的,简单易用的,功能强大的

WEB前端JavaScript现成的组件库

        注意:今天的EasyUI组件库的版本较高,需要高版本浏览器支持,

中低版本浏览器会有不能正常执行的情况

   (3)JavaScript,AJAX,JSON,jQuery,EasyUI分别能解决什么问题

            JS:基于浏览器对web页面中的节点进行操作,比较麻烦

            jQuery:基于浏览器简化对web页面中的节点进行操作,做到了write less do more

            AJAX:基于浏览器与服务端进行局部刷新的异步通讯编程模式

            JSON:简化自定义对象的创建与AJAX数据交换轻量级文本

            EasyUI:快速基于现成的组件创建自已的web页面

组件:是指已经由第三方开源组织写好的,直接可以使用的功能界面,例如:form,layout,tree...

     注意:我们学的都是零散的组件,项目中需要将其装配起来,方可构建完整的web页面,

EasyUI只是众多前端WEB组件之一

   (4)jQuery-EasyUI快速入门----可折叠功能的面板

        第一步:创建一个js-day05这么一个web工程

        第二步:在WebRoot目录下创建00-base.html

        第三步:在WebRoot目录下创建js和themes目录,导入官方文件

参见<< jquery-easyui-1.3.6文件夹>>

        第四步:在00-base.html 文件的<head>标签中引入如下文件

    <!-- 引入外部CSS文件 -->

    <link rel="stylesheet" href="../themes/icon.css" type="text/css"></link>

    <link rel="stylesheet" href="../themes/default/easyui.css" type="text/css"></link>

 

    <!-- 引入外部JS文件 -->

    <script type="text/javascript" src="../js/jquery.min.js"></script>

    <script type="text/javascript" src="../js/jquery.easyui.min.js"></script>

        第五步:在00-base.html 文件的<body>标签中创建如下<div>标签

   <div

      id="p"

      class="easyui-panel"

      style="width:500px;height:200px;padding:10px;"  

        title="我的面板"

        iconCls="icon-save"

        collapsible="true">  

       内容<br/>

       内容<br/>

       内容<br/>

       内容<br/>

   </div>

(5)EasyUI组件

       (06)form表单

                

             》validatebox验证框

                    姓名:必填/1-6个字符/必填中文

                    邮箱:必填/1-30个字符/必填符合邮箱格式/后缀必须是com或cn

   <div style="margin:100px"></div>

   用户名: 

   <input id="vv"/>

   <script type="text/javascript">

      $("#vv").validatebox({

          required:true,

         validType:["length[1,4]","zhongwen"]

      });

   </script>

    <script type="text/javascript">

      //自定义验证规则

      $.extend($.fn.validatebox.defaults.rules, {   

          zhongwen : {   

              validator: function(value){//value表示在文本框中输入的内容   

                  if(/^[\u3220-\uFA29]+$/.test(value)){

                  return true;

                  }

              },   

              message: "用户名必须填中文" 

          }   

      });

   </script>

        思考:检查邮箱的扩展名只能是{'com','cn'}      

             》combobox下拉列表框

                   设置下拉列表框默认值  

   你所在的城市:

   <select id="cc" class="easyui-combobox" name="city" style="width:150px;">  

       <option>aitem1</option>   

       <option>bitem1</option>  

       <option>bitem2</option>  

       <option>citem1</option>  

       <option>citem2</option>  

       <option>citem3</option>  

       <option>ditem1</option>  

       <option>ditem2</option>  

       <option>ditem3</option>  

       <option>ditem4</option>  

   </select> 

   <script type="text/javascript">

      $(function(){

          $("#cc").combobox("setValue","长沙");

      });

   </script>

              

   你所在的城市:

   <input id="cc" name="city" value="广州"/>  

  

   <script type="text/javascript">

      $("#cc").combobox({

          url:"combobox_data.json",

          valueField:"id",   

       textField:"text"

      });

      //textField表示在下拉框中看得见的内容,<option>长沙</option>

      //valueField表示在下拉框中看不见的内容,用于向后台传递数据<option value="cs">长沙</option>

   </script>

                combobox_data.json:

[

  {   

    "id":"gz",   

    "text":"广州"  

  },

  {   

    "id":"zs",   

    "text":"中山"  

  },

  {   

    "id":"fs",   

    "text":"佛山"

  },

  {   

    "id":"sz",   

    "text":"深圳",

    "selected":true  

  },

  {   

    "id":"yj",   

    "text":"阳江"  

  }

]

             》datebox日期选择框

                   显示yyyy-mm-dd格式,

               添加<script type="text/javascript" src="locale/easyui-lang-zh_CN.js"></script>    

                   选中日期并显示选中的日期

入职时间:<input id="dd" type="text"></input> 

   <script type="text/javascript">

      $("#dd").datebox({

          required:true

      });

   </script>

   <script type="text/javascript">

      $("#dd").datebox({

          onSelect:function(date){

             alert(date.getFullYear()+"年"+(date.getMonth()+1)+"月"+date.getDate());  

          }

      });

   </script>

       

             》numberspinner数字微调框

                   设置数字微调框中的值

                   获取数字微调框中的值

   商品数量:<input type="text" size="2px" value="1"/><span></span>

   <hr/>

   <input id="ss" required="required" style="width:80px;"> 

   <script type="text/javascript">

      $("#ss").numberspinner({

          value:1,

          min:1,

          max:100,

          editable:true

      });

   </script>

   <script type="text/javascript">

          $("#ss").numberspinner({

             onSpinUp:function(){

                //获取numberspinner的当前值

                var value = $("#ss").numberspinner("getValue");

                //将numberspinner的当前值设置到商品数量文本框中

                $("input:first").val(value).css("color","red");

                //如果value值为100

                if( value == 100 ){

                   $("span:first").html("商品已满,不能再购买了").css("color","blue");  

                   $("input:first").attr("disabled","disabled");

                }

             },

             onSpinDown:function(){

                //获取numberspinner的当前值

                var value = $("#ss").numberspinner("getValue");

                //将numberspinner的当前值设置到商品数量文本框中

                $("input:first").val(value).css("color","red");

                //如果value值小于100

                if( value < 100 ){

                   $("span:first").html("");

                   $("input:first").removeAttr("disabled");

                }

             }

          });

   </script>

                 》slider滑动条框

                   拖动滑块,将值同步显示到span标签中

   身高:<span>150</span><span id="tip"></span>

   <div style="margin:50px">

      <input

          id="ss"

          class="easyui-slider"

          value="0" 

          style="width:600px;height:500px"

           data-options="max:180,min:150,mode:'v',showTip:true,rule:[150,'|',160,'|',170,'|',180]"/> 

   </div>

  

   <script type="text/javascript">

      $("#ss").slider({

          onChange:function(newValue){

             $("span:first").text(newValue);

             if(newValue == 180){

                $("#tip").text("你真高呀");

             }else if(newValue >= 170){

                $("#tip").text("你不错呀");

             }else if(newValue >= 160){

                $("#tip").text("你可以呀");

             }

          }

      });

   </script>

       (07)progressbar进度条

                 》每隔1秒让进度条按随机数填充,直至充满进度条刻度

   进度条:

   <div id="p" style="width:400px;"></div>

   <script type="text/javascript">

      $("#p").progressbar({

          width:"auto",

          height:44,

          value:0

      });

   </script>

 

   <input type="button" value="开始" style="font-size:111px"/>

   <script type="text/javascript">

      var timeID = null;

      //随机产生1-9之间的整数,包含1和9

      function getNum(){

          return Math.floor(Math.random()*9)+1;

      }

      $(":button").click(function(){

          timeID = window.setInterval(function(){

             //获取随机数,例如:9

             var num = getNum();

             //获取进度条当前值,例如:99

             var value = $("#p").progressbar("getValue");

             //如果随机数加当前值小于100的话     

             if(value + num < 100){

                //填充进度条当前值

                $("#p").progressbar("setValue",value+num);

             }else{

                //将进度条当前值设置为100

                $("#p").progressbar("setValue",100);

                //停止定时器

                window.clearInterval(timeID);

                //将"开始"按钮生效

                $(":button").removeAttr("disabled");

             }    

          },200);  

          //将"开始"按钮失效

         $(this).attr("disabled","disabled");     

      });

   </script>

       (08)window窗口

                 》单击按钮,打开或关闭一个窗口

   <input id="open1" type="button" value="打开窗口1"/>

   <input id="open2" type="button" value="打开窗口2"/>

   <hr/>

   <div id="win1"></div>

   <div id="win2"></div>

   <script type="text/javascript">

      $("#open1").click(function(){

          $("#win1").window({

             title:"我的窗口1",

             width:200,

             height:300,

             top:100,

             left:400,

             collapsible:false,

             minimizable:false,

             maximizable:false,

             closable:true,

             draggable:false,

             resizable:false,

             shadow:false,

             modal:false,

             href:"08_datebox.html"

          });

      });

      $("#open2").click(function(){

          $("#win2").window({

             title:"我的窗口2",

             width:200,

             height:300,

             top:100,

             left:800,

             collapsible:false,

             minimizable:false,

             maximizable:false,

             closable:true,

             draggable:false,

             resizable:false,

             shadow:false,

             modal:false

          });

      });

   </script>

       (09)dialog对话框

             》单击按钮,打开或关闭一个对话框

   <input id="open1" type="button" value="打开对话框1"/>

   <hr/>

   <div id="dd1"></div>  

   <script type="text/javascript">

      $("#open1").click(function(){

         $("#dd1").dialog({

             width:300,

             height:400,

             left:400,

             top:100,

             title:"对话框1",

             toolbar:[

                {

                   text:'编辑',

                   iconCls:'icon-edit',

                   handler:function(){alert('edit')}

                },

                {

                   text:'帮助',

                   iconCls:'icon-help',

                   handler:function(){alert('help')}

               

                }

             ],

             buttons:[

                {

                   text:'确定',

                   handler:function(){alert('ok')}

                },

                {

                   text:'关闭',

                   handler:function(){

                       //关闭本对话框

                      $("#dd1").dialog("close");

                   }

                }

             ],

             href:"07_combobox_2.html"

          });

      });

   </script>

       (10)messager消息窗口

                 》单击按钮,弹出警告框

                 》单击按钮,弹出确认框

                 》单击按钮,弹出显示框

                 》单击按钮,弹出输入框

<input type="button" value="警告框"/>

   <input type="button" value="确认框"/>

   <input type="button" value="输入框"/>

   <input type="button" value="显示框"/>

   <hr/>

   <div style="margin:200px"></div>   

   <script type="text/javascript">

      $(":button").click(function(){

          var tip = $(this).val();

          tip = $.trim(tip);

          if("警告框" == tip){

             $.messager.alert("我的警告框","不能睡觉了","warning");

          }else if("确认框" == tip){

             $.messager.confirm("我的确认框","你确定在关闭本窗口吗?",function(flag){

                alert(flag);

             });

          }else if("输入框" == tip){

             $.messager.prompt("我的输入框","你决定要学习Android还是JavaEE吗?",function(value){

                alert(value);

             });

          }else if("显示框" == tip){

             $.messager.show({

                title:"我的显示框",

                msg:"不要太区分Android和JavaEE了",

                showType:"fade",

                width:200,

                height:200,

                timeout:1000

             });

          }

      });

   </script>

       (11)tree树

                 》选中树中某个子节点,弹出选中的内容 

                 》用树替代linkButton按钮

<ul id="ttt" class="easyui-tree" style="width:222px">  

       <li>  

          <span>第一章</span>

       </li>  

       <li>  

           <span>第二章</span>

           <ul>

           <li>

               <span>第一节</span>

           </li>

           <li>

               <span>第二节</span>

               <ul>

                  <li>第一条</li>

                  <li>第二条</li>

                  <li>第三条</li>

               </ul>

           </li>

           </ul> 

       </li>  

   </ul>

              

<ul id="ttt"></ul>

   <script type="text/javascript">

      $("#ttt").tree({

          url:"tree_data.json",

          lines:true

      });

   </script>

   <script type="text/javascript">

      $("#ttt").tree({

          onClick:function(node){

             alert(node.text);

          }

      });

   </script>

               tree_data.json:

[

  {

    "id":1,

    "text":"第一章"

  },

  {

    "id":2,

    "text":"第二章",

    "state":"closed",

    "children":[

       {

       "id":21,

          "text":"第一节"

       },

       {

         "id":22,

          "text":"第二节"       

       },

       {

         "id":23,

          "text":"第三节",

          "state":"closed",

          "children":[

             {

               "id":231,

               "text":"第一条"

             },   

             {

                 "id":232,

               "text":"第二条"     

             }

          ]     

       }

    ]

  }

]

       (12)datagrid数据表格

》参见E:\开发类库\jquery-easyui-1.3.6\demo\datagrid(9-数据网格)\products.json

              》 DateGrid会异步以POST方式向服务器传入二个参数:page和rows二个参数,服务端需要哪个,就接收哪个参数

                   * page:需要显示的页号

                   * rows:需要获取多少条记录

             

开发过程:

DB:

use js;

drop table if exists users;

create table users(

       id    int(5) primary key auto_increment,

       name varchar(4) not null,

       sal int(5) not null

);

insert into users(name,sal) values('小赵君',1000);

insert into users(name,sal) values('中赵君',1500);

insert into users(name,sal) values('大赵君',2000);

insert into users(name,sal) values('赵小君',2500);

insert into users(name,sal) values('赵中君',3000);

insert into users(name,sal) values('赵大君',3500);

insert into users(name,sal) values('赵君小',4000);

insert into users(name,sal) values('赵君中',4500);

insert into users(name,sal) values('赵君大',5000);

insert into users(name,sal) values('赵君',5500);

select id,name,sal from users;

                            Entity:

public class User {

   private Integer id;

   private String name;

   private Integer sal;

   public User(){}

   public Integer getId() {

      return id;

   }

   public void setId(Integer id) {

      this.id = id;

   }

   public String getName() {

      return name;

   }

   public void setName(String name) {

      this.name = name;

   }

   public Integer getSal() {

      return sal;

   }

   public void setSal(Integer sal) {

      this.sal = sal;

   }

}

public class PageBean {

   private Integer currPageNO;

   private Integer perPageNO;

   private Integer allRecordNO;

   private Integer allPageNO;

   private List<User> userList = new ArrayList<User>();

   public PageBean(){}

   public Integer getCurrPageNO() {

      return currPageNO;

   }

   public void setCurrPageNO(Integer currPageNO) {

      this.currPageNO = currPageNO;

   }

   public Integer getPerPageNO() {

      return perPageNO;

   }

   public void setPerPageNO(Integer perPageNO) {

      this.perPageNO = perPageNO;

   }

   public Integer getAllRecordNO() {

      return allRecordNO;

   }

   public void setAllRecordNO(Integer allRecordNO) {

      this.allRecordNO = allRecordNO;

   }

   public Integer getAllPageNO() {

      return allPageNO;

   }

   public void setAllPageNO(Integer allPageNO) {

      this.allPageNO = allPageNO;

   }

   public List<User> getUserList() {

      return userList;

   }

   public void setUserList(List<User> userList) {

      this.userList = userList;

   }

}

               Util:

public class JdbcUtil {

   private static ComboPooledDataSource dataSource = new ComboPooledDataSource();

   public static ComboPooledDataSource getDataSource() {

      return dataSource;

   }

}

src/c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<c3p0-config>

   <default-config>

      <property name="driverClass">com.mysql.jdbc.Driver</property>

      <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/js</property>

      <property name="user">root</property>

      <property name="password">root</property>

      <property name="acquireIncrement">2</property>

      <property name="initialPoolSize">5</property>

      <property name="minPoolSize">1</property>

      <property name="maxPoolSize">5</property>

   </default-config>

</c3p0-config>

Dao:

public class UserDao {

   //select count(id) from users where 1=1 and name like '%赵%';

   public Integer getAllRecordNO(String sql) throws Exception{

      QueryRunner runner = new QueryRunner(JdbcUtil.getDataSource());

      Long temp = (Long) runner.query(sql,new ScalarHandler());

      return temp.intValue();

   }

   //select id,name,sal from users where 1=1 and name like '%赵%' limit ?,?;

   public List<User> findAllRecord(String sql,Integer start,Integer size) throws Exception{

      QueryRunner runner = new QueryRunner(JdbcUtil.getDataSource());

      return runner.query(sql,new BeanListHandler<User>(User.class),new Object[]{start,size});

   }

}

Service:

public class UserService {

   private UserDao userDao = new UserDao();

   //show("赵",2);

   public PageBean show(String keywords,Integer currPageNO) throws Exception{

      PageBean pageBean = new PageBean();

     

      String sqlA = "select count(id) from users where 1=1";

      String sqlB = "select id,name,sal from users where 1=1";

     

      if(keywords != null && keywords.trim().length() > 0){

          sqlA += " and name like '%" + keywords + "%'";

          sqlB += " and name like '%" + keywords + "%'";

      }

     

      pageBean.setCurrPageNO(currPageNO);

     

      Integer allRecordNO = userDao.getAllRecordNO(sqlA);

      pageBean.setAllRecordNO(allRecordNO);

     

      Integer allPageNO = null;

      if(pageBean.getAllRecordNO() % pageBean.getPageSize() == 0){

          allPageNO = pageBean.getAllRecordNO() / pageBean.getPageSize();

      }else{

          allPageNO = pageBean.getAllRecordNO() / pageBean.getPageSize() + 1;

      }

      pageBean.setAllPageNO(allPageNO);

     

      Integer size = pageBean.getPageSize();

      Integer start = (pageBean.getCurrPageNO()-1) * size;

      sqlB += " limit ?,?";

      List<User> userList = userDao.findAllRecord(sqlB,start,size);

      pageBean.setUserList(userList);

     

      return pageBean;

   }

}

Action:

public class UserServlet extends HttpServlet {

   public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

      try{

          request.setCharacterEncoding("UTF-8");

         

          String keywords = request.getParameter("keywords");

          if(keywords==null || keywords.trim().length()==0){

             keywords = "";

          }

          System.out.println("keywords=" + keywords);//赵

         

          String temp = request.getParameter("page");

          if(temp == null || temp.trim().length()==0){

             temp = "1";

          }

          Integer currPageNO = Integer.parseInt(temp);

          System.out.println("currPageNO=" + currPageNO);//2

         

          UserService userService = new UserService();

          PageBean pageBean = userService.show(keywords,currPageNO);

         

          Map<String,Object> map = new LinkedHashMap<String,Object>();

          map.put("total",pageBean.getAllRecordNO());

          map.put("rows",pageBean.getUserList());

         

          JSONArray jsonArray = JSONArray.fromObject(map);

          String jsonJAVA = jsonArray.toString();

          jsonJAVA = jsonJAVA.substring(1,jsonJAVA.length()-1);

         

         response.setContentType("text/html;charset=UTF-8");

          PrintWriter pw = response.getWriter();

          pw.write(jsonJAVA);

          pw.flush();

          pw.close();

         

      }catch(Exception e){

          e.printStackTrace();

      }

   }

}

 WebRoot/userList.jsp

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

   <!-- 引入外部CSS文件 -->

    <link rel="stylesheet" href="${pageContext.request.contextPath}/themes/icon.css" type="text/css"></link>

    <link rel="stylesheet" href="${pageContext.request.contextPath}/themes/default/easyui.css" type="text/css"></link>

    <!-- 引入外部JS文件 -->

    <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.min.js"></script>

    <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.easyui.min.js"></script>

    <script type="text/javascript" src="${pageContext.request.contextPath}/locale/easyui-lang-zh_CN.js"></script>

  </head>

  <body>

   

    姓名:

    <input type="text" size="10px" id="name"/>

    <input type="button" value="查询" onclick="find()"/>

   <table id="dg"></table> 

  

   <script type="text/javascript">

      function find(){

          $("#dg").datagrid("load",{

             "keywords" : $.trim( $("#name").val() )

          });

      }

   </script>

   <script type="text/javascript">

      $("#dg").datagrid({  

          width:400,

          url:"${pageContext.request.contextPath}/UserServlet",   

          fitColumns:true,

          columns:[[   

              {field:'id',title:'编号',width:100},   

              {field:'name',title:'姓名',width:100},   

              {field:'sal',title:'薪水',width:100}   

          ]],

          singleSelect:true,

          pagination:true,

          pageNumber:1,

          pageSize:2,

          pageList:[2]   

      });   

   </script>

     

  </body>

</html>

猜你喜欢

转载自www.cnblogs.com/wahahshield/p/9377108.html
今日推荐