jfinal利用jsp实现分页功能

在我的上一篇我已经实现了如何利用jfinal来实现增删改查,接下来是实现分页功能。在jfinal社区有demo,里面有简单的分页功能,它是Free Marke来实现的。。。因为我没怎么接触过Free Marke。所以我的分页是用jsp来实现的(显示的数据还是上一篇文章的数据)。可能还不是特别的完善,接下来会慢慢的完善.

1.MainConfig.java
package com.common;

import com.Exception.ExceptionController;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.ext.handler.ContextPathHandler;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.c3p0.C3p0Plugin;
import com.jfinal.render.ViewType;
import com.jfinal.template.Engine;
import com.login.loginControler;
import com.students.StudentController;
import com.students.students;
import com.teachers.teachers;

public class MainConfig extends JFinalConfig {

    public static void main(String[] args) 
    {
        JFinal.start("WebRoot",80,"/",5);
        
    }

    public void configConstant(Constants me) 
    {
        me.setViewType(ViewType.JSP);
        
        PropKit.use("config.properties");
    }

    /**
     * 设置路径 
     */
    public void configRoute(Routes me) 
    {
        me.add("/students",StudentController.class);

    }


    public void configEngine(Engine me) 
    {

    }

    public void configPlugin(Plugins me) 
    {
        C3p0Plugin c3p0Plugin=new C3p0Plugin(PropKit.get("jdbcUrl"),PropKit.get("username"),PropKit.get("password"));
        ActiveRecordPlugin arp0=new ActiveRecordPlugin(c3p0Plugin);
        arp0.setShowSql(true);
        arp0.addMapping("students", students.class);
        me.add(c3p0Plugin);
        me.add(arp0);
    }

    public void configInterceptor(Interceptors me) 
    {
        
    }

    public void configHandler(Handlers me) 
    {
        
    }

}
2.students.java
package com.students;

import com.jfinal.plugin.activerecord.Model;

public class students extends Model<students> 
{
    public static final students students=new students();
}
3.Serivce.java
package com.common;

import java.util.List;


import com.jfinal.plugin.activerecord.Page;
import com.students.students;

public class Serivce 
{
    /**
     * 显示全部学生信息
     */
    public List<students> StudentList(Integer number)
    {
        String sql="select * from students limit 0,";
        sql+=number;
        List<students> dao=students.students.find(sql);
        return dao;
    }
    /**
     * 实现增加功能
     */
    public void submitMessage(students student)
    {
        System.out.println(student);
        student.save();     
    }
    /**
     * 实现删除功能
     */
    public void deleteStudent(Integer id)
    {
        students.students.deleteById(id);
    }
    public students editMessage(Integer id)
    {
        students stu=students.students.findById(id);
        return stu;
    }
    /**
     * 实现更新数据
     */
    public void updateMessage(students stu)
    {
        stu.update();
    }
    public List<students> sqlstatement(Integer p,Integer p2)
    {
        String sql="select * from students limit ";
        sql+=p;
        sql+=","; 
        sql+=p2;
        List<students> dao=students.students.find(sql);
        return dao;
    }
    
    public List<students> pageNumber()
    {
        List<students> dao=students.students.find("select * from students");
        return dao;
    }

}
4.StudentController.java(实现要点)
package com.students;

import java.util.List;

import com.common.Serivce;
import com.jfinal.core.Controller;

public class StudentController extends Controller 
{
    Serivce serivce=new Serivce();
    //下一页的参数
    Integer pageNumber=0;
    //上一页的参数
    Integer looktg=0;
    //当前页数
    Integer pagination=1;
    //每一页显示的个数
    Integer number=3;
    public void index()
    {
        pageNumber=0;
        setAttr("pageNumber", pageNumber);
        setAttr("student", serivce.StudentList(number));
        if(serivce.pageNumber().size()%number!=0)
        {
            setAttr("page", (serivce.pageNumber().size()/number)+1);
        }
        else
        {
            setAttr("page", serivce.pageNumber().size()/number);
        }
        setAttr("pagination", pagination);
        render("list.jsp");     

    }
    public void submit()
    {       
        students student=getModel(students.class,"student");
        serivce.submitMessage(student);
        if(serivce.pageNumber().size()%2==1)
        {
            setAttr("page", (serivce.pageNumber().size()/number)+1);
        }
        else
        {
            setAttr("page", serivce.pageNumber().size()/number);
        }
        redirect("/students");
    }
    public void delete()
    {
        serivce.deleteStudent(getParaToInt(0));
        index();
    }
    public void edit()
    {
        form();
    }
    public void form()
    {
        students student=serivce.editMessage(getParaToInt(0));
        setAttr("student", student);
        render("form.jsp");
    }
    public void update()
    {
        students stu=getModel(students.class,"student");
        serivce.updateMessage(stu);
        redirect("/students");
    }
    /**
     * 下一页
     */
    public void nextpage()
    {   
        pageNumber=getParaToInt(0)+number;
        System.out.println(pageNumber);
        if(pageNumber>serivce.pageNumber().size()-1)
        {
            index();
        }
        else
        {
            pagination=getParaToInt(1)+1;
            List<students> dao=serivce.sqlstatement(pageNumber,number);
            if(serivce.pageNumber().size()%number!=0)
            {
                setAttr("page", (serivce.pageNumber().size()/number)+1);
            }
            else
            {
                setAttr("page", serivce.pageNumber().size()/number);
            }
            setAttr("pageNumber", pageNumber);
            setAttr("student", dao);
            setAttr("pagination", pagination);
            render("list.jsp");
        }
    }
    /**
     * 上一页
     */
    public void Previouspage()
    {
        
        looktg=getParaToInt(0)-number;
        if(looktg<0)
        {
            index();
        }
        else
        {
            pagination=getParaToInt(1)-1;
            List<students> dao=serivce.sqlstatement(looktg, number);
            if(serivce.pageNumber().size()%number!=0)
            {
                setAttr("page", (serivce.pageNumber().size()/number)+1);
            }
            else
            {
                setAttr("page", serivce.pageNumber().size()/number);
            }
            setAttr("pageNumber", looktg);
            setAttr("student", dao);    
            setAttr("pagination", pagination);
            render("list.jsp");
        }
    }
    /**
     * 尾页
     */
    public void trailerpage()
    {
        Integer number1=0;
        if(serivce.pageNumber().size()%number==0)
        {
            number1=serivce.pageNumber().size()-number; 
        }
        else
        {
            number1=serivce.pageNumber().size()-(serivce.pageNumber().size()%number);       
        }   
        if(serivce.pageNumber().size()%number!=0)
        {
            setAttr("page", (serivce.pageNumber().size()/number)+1);
            pagination=serivce.pageNumber().size()/number+1;
        }
        else
        {
            setAttr("page", serivce.pageNumber().size()/number);
            pagination=serivce.pageNumber().size()/number;
        }
        System.out.println(number1);
        List<students> dao=serivce.sqlstatement(number1, number);
        setAttr("pageNumber", serivce.pageNumber().size()-number);
        setAttr("student", dao);
        setAttr("pagination", pagination);
        render("list.jsp");
    }
    /**
     * 跳转到指定页面
     */
    public void jumpPage()
    {       
        //获取前端值
        String pagination=getPara("number");
        //转换格式
        Integer number1=Integer.parseInt(pagination);
        //从数据库中得到指定数据
        List<students> dao=nextpage(number1);
        pageNumber=number1*number-number;
        if(serivce.pageNumber().size()%number!=0)
        {
            setAttr("page", (serivce.pageNumber().size()/number)+1);
        }
        else
        {
            setAttr("page", serivce.pageNumber().size()/number);
        }
        setAttr("pagination", pagination);
        setAttr("pageNumber", pageNumber);
        setAttr("student", dao);
        render("list.jsp");
    }
    public List<students> nextpage(Integer number1)
    {   
        Integer pageNumber=number1*number-number;
        List<students> dao=serivce.sqlstatement(pageNumber,number);
        return dao;
    }
}

接下来是前端的显示问题

5.list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>

<body>
    <a href="/students/form/">增加学生</a>
    <table border="2" width="80%">      
        <caption><h1>学生信息</h1></caption>
        <thead>
        <th>姓名</th>
        <th>年龄</th>
        <th>性别</th>
        <th>备注</th>
        <th rowspan="2">操作</th>
        </thead>
        <tbody>
        <c:forEach items="${student}" var="student">
        <tr>
        <th>${student.name}</th>
        <th>${student.age}</th>
        <th>${student.sex}</th>
        <th>${student.remark}</th>
        <th><a href="/students/edit/${student.id}">修改 </a><a href="/students/delete/${student.id}"> 删除</a></th>
        </tr>
        </c:forEach>
        </tbody>
            
        <tr>        
        <th colspan="5">总页数  ${pagination}/${page}    
        <a href="/students">首页</a>    
        <a href="/students/Previouspage/${pageNumber}-${pagination}">上一页</a>    
        <a href="/students/nextpage/${pageNumber}-${pagination}">下一页</a>    
        <a href="/students/trailerpage/">尾页</a>   
        <form action="/students/jumpPage/">
        <label>跳转到</label>
        <input type="text" name="number">
        <button type="submit">确定</button>
        </form>
        </th>
        </tr>
    </table>
    
    
      
</body>
</html>
6.form.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <form action="${student==null?'/students/submit':'/students/update'}" method="post">
    <input type="hidden" name="student.id" value="${student.id}">
    <label>姓名</label>
    <input type="text" name="student.name" value="${student.name}">
    <label>年龄</label>
    <input type="text" name="student.age" value="${student.age}">
    <div >
    <label>性别</label>
    <div>
    <input type="radio"  name="student.sex" <c:if test="${student.sex=='男'}">checked="checked"</c:if>value="男"> 男
    </div>
    <div>
    <input type="radio"   name="student.sex" <c:if test="${student.sex=='女'}">checked="checked"</c:if>value="女"> 女
    </div>
    </div>
    <label>备注</label>
    <textarea rows="10" cols="20" name="student.remark">${student.remark}</textarea>
    <button type="submit">提交</button>
    </form>
</body>
</html>

完美实现

搜狗截图17年10月12日2008_1.png
这是我第一次实现分页功能,实现的时候挺兴奋的,因为在网上找了许多demo,好像都没有用jfinal和jsp来实现分页的。想着没有的话,就自己做一个出来,在网上看了许多分页的原理之后,我觉得我的应该是可以做出来的,就尝试着做了一个试试看,没想到居然做出来的。一开始是写死代码,让它能够显示固定的分页,然后就慢慢的调整改善,最后做出来我这个的分页功能,只用修改显示个数就可以了,以上.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,448评论 25 707
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,573评论 18 399
  • “发脾气是无能的表现” 现在满腔怒火,想用拳头砸墙,想拎起加丢下床,想拿起棍子对她一顿痛打。事实是我已经使劲拍了自...
    roserao阅读 138评论 0 0
  • 今天一早刚进办公室,就发现桌上躺着一份快递。心情激动,心想,等了两个多月的菲朵的年历本,终于到了。 这是我送给自己...
    阿蕾阿蕾蕾阅读 670评论 0 3
  • 人类的生命来源于一个细胞,成年人体内有近1014细胞,一生能产生1015细胞。人体就像细胞的社群,细胞是功能的直接...
    54cfdec5df75阅读 452评论 0 1