• 使用Struts2和jQuery EasyUI实现简单CRUD系统(七)——数据分页处理


    上篇完毕多选删除的功能之后,接下来就是做分页功能了。曾经的分页是一个麻烦的问题。并且数据量巨大的时候,直接把这些元素取出来显然速度较慢,所以取一定区间的数据还是高效的。



    之前自己写分页的时候,分页的界面当然是自己做的,用了ejui之后。真的方便了许多。方便到什么程度了。

    <table id="dg" title="My Users" class="easyui-datagrid"
    		style=" 700px; height: 500px" url="list_ej" toolbar="#toolbar"
    		rownumbers="true" fitColumns="true"  >
    		<thead>
    			<tr>
    				<!-- 	这样的写法也是能够的		
    				<th field="id" width="50">id</th>
    				<th field="name" width="50">name</th>
    				<th field="password" width="50">password</th> -->
    				<th field="ck" checkbox="true"></th>
    				<th data-options="field:'id','200px'">id</th>
    				<th data-options="field:'name','200px'">name</th>
    				<th data-options="field:'password','200px',align:'right'">password</th>
    			</tr>
    		</thead>
    	</table>

    仅仅须要在属性里面加入:

    pagination="true" pageNumber ="1"
    pagination是在底部显示分页工具栏。pageNumber是原始的显示的页数。第几页。


    难点在于后台数据要怎么传过去。

    在没和后台正确处理页数和每页显示的数据数的关系时,是所有显示的。可是选择页面数的时候ejui还是会正确地帮你跳到详细的页数。但这显然不是我们想要的。


    后面在思路上就卡住了。我要怎么将分页栏的数据传到action里面呢?

    解决的方法是,直接由rows和page属性。分别相应一页显示的数据条数和当前页数,仅仅须要在action里面声明为全局变量,并写出相应的get和set方法。

    public class ControlAction extends ActionSupport{
    	private int rows;
    	private int page;
    	public int getRows() {
    		return rows;
    	}
    	public void setRows(int rows) {
    		this.rows = rows;
    	}
    	public int getPage() {
    		return page;
    	}
    	public void setPage(int page) {
    		this.page = page;
    	}

    拿到之后容易处理。我们能够写一个封装的方法将拿到的页数和条数。对数据库操作并转换为json串。

    public String list_ej(){
    		ActionContext ctx=ActionContext.getContext();
    		String result="";
    		result= PageUtil.getPage(page, rows);
    		try {
    //			ServletActionContext.getResponse().getWriter().println(JSONArray.fromObject(list));
    			ctx.put("json", result);
    			
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} 
    		return "success";
    	}

    PageUtil.java

    package util;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;
    
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    
    public class PageUtil {
    	public static String getPage(int pagenumber,int rows){
    		String result = "";
    		int count = 0;
    		int number = 0;
    		Connection c = ConnectToSQL.getConn();
    		Statement st = ConnectToSQL.getSt(c);
    		List<User> list = new ArrayList<User>();
    		try {
    			ResultSet countrs = st.executeQuery("select count(*) from user");
    			countrs.next();
    			//
    			//System.out.println(countrs.getInt(1));
    			count = countrs.getInt(1);
    		} catch (SQLException e1) {
    			e1.printStackTrace();
    		}
    		if(count%rows==0){
    			number =count/rows;
    		}else{
    			number = count/rows+1;
    		}
    		//
    		//System.out.println(number);
    		try {
    			int index = 0;
    			if(pagenumber-1>0){
    				index = (pagenumber-1)*rows-1;
    			}
    			ResultSet rs = st.executeQuery("select * from user limit "+index+","+rows);
    			
    			while(rs.next()){
    				User u = new User();
    				u.setId(rs.getInt("userid"));
    				u.setName(rs.getString("username"));
    				u.setPassword(rs.getString("password"));
    				list.add(u);
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		
    		//这个把list看成数组,用json格式输出   仅仅是输出list
    		List<User> o  = JSONArray.fromObject(list);
    		
    		
    		//无需字符串拼接
    		//String result = "{"total":"+count+","rows":"+s+"}";
    		
    		//接下来的是吧整个对象转json格式  对象有两个属性 total和rows属性  而rows里面又是一个数组 
    		JSONObject jo = new JSONObject();
    		jo.put("total", count);
    		jo.put("rows", list);
    		result = jo.toString();
    		return result;
    	}
    }

    ejui和struts2好用在哪里呢,ejui仅仅须要接受到所有的数据条数和当前页的数据就是rows:后面的json数据,它会自己主动填充到DataGrid中。

    {"total":5,"rows":[{"id":1277,"name":"df2","password":"123"},
    {"id":1278,"name":"45ty","password":"123"},
    {"id":1279,"name":"sdfy","password":"123"},
    {"id":1280,"name":"345356","password":"p"},
    {"id":1281,"name":"werwer","password":"twer"}]}
    

    而一旦ejui的rows和page改变,

    一旦你选择page和rows,是通过ajax将数据传递过去,然后DataGrid局部刷新。

    它有会把參数传递给url,而struts本身通过get和set方法定义这两个属性之后又能取到这两个值,所以很方便。

    也很强大,界面美观。


    这个简单的CRUD系统功能大体完毕,可是显然自己在JSON和EasyUI的掌握方面还不熟悉。

    这个还是要多练练。

    项目github地址:https://github.com/iaiti/EasyUI-Struts2.git


    将java代码和jsp页面代码分离。新建了分支version2.0。

  • 相关阅读:
    arm SecurCore 处理器【转】
    ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57【转】
    arm处理器中a5 a8 a9,v6 v7,arm7 arm9 arm11都是依据什么来分类的【转】
    platform型设备在/dev目录下自动创建设备节点的分析【转】
    linux下bus、devices和platform的基础模型 【转】
    kernel 中 sscanf和sprintf()函数使用说明【转】
    Linux内核中的printf实现【转】
    sprintf,snprintf的用法(可以作为linux中itoa函数的补充)【转】
    Linux设备模型(3)_Uevent【转】
    Linux内核中的GPIO系统之(3):pin controller driver代码分析--devm_kzalloc使用【转】
  • 原文地址:https://www.cnblogs.com/llguanli/p/7136233.html
Copyright © 2020-2023  润新知