先看效果图
package com.demo.common; import com.jfinal.core.Controller; public class BaseController extends Controller { private Integer pageNo = new Integer(1); private Integer limit = new Integer(10); public Integer getPageNo() { return pageNo; } public void setPageNo(Integer pageNo) { this.pageNo = pageNo; } public Integer getLimit() { if ((this.limit == null) || ("".equals(this.limit))) this.limit = Integer.valueOf(10); return this.limit; } public void setLimit(Integer limit) { this.limit = limit; } }
package com.demo.user; import java.util.UUID; import com.demo.common.BaseController; import com.jfinal.aop.Before; import com.jfinal.plugin.activerecord.Page; @Before(UserInterceptor.class) public class UserController extends BaseController { public void index() { Page<User> userPage = User.dao.paginate(getPageNo(), getLimit(), "select * ", "from user "); setAttr("userPage", userPage); render("user.jsp"); } public void query() { if(isParaBlank("user.tj")){ forwardAction("/user");; }else{ Page<User> userPage = User.dao.paginate(getPageNo(), getLimit(), "select * ", "from user where name like ?", "%"+getPara("user.tj")+"%"); setAttr("userPage", userPage); setAttr("user.tj", getPara("user.tj")); render("user.jsp"); } } /** * 下一页 */ public void nextPage() { Page<User> userPage = User.dao.paginate(getParaToInt(0) + getPageNo(), getLimit(), "select * ", "from user "); setAttr("userPage", userPage); render("user.jsp"); } /** * 上一页 */ public void prePage() { Page<User> userPage = User.dao.paginate(getParaToInt(0)- getPageNo(), getLimit(), "select * ", "from user "); setAttr("userPage", userPage); render("user.jsp"); } /** * 首页 尾页 */ public void jumpPage() { Page<User> userPage = User.dao.paginate(getParaToInt(0), getLimit(), "select * ", "from user "); setAttr("userPage", userPage); render("user.jsp"); } public void add() { } @Before(UserValidator.class) public void save() { User user = new User(); user.set("id", UUID.randomUUID().toString().replace("-", "")); user.set("name", getPara("user.name")); user.set("age", getPara("user.age")); user.set("mz", getPara("user.mz")); user.save(); // getModel(User.class).save(); redirect("/user"); } public void edit() { setAttr("user", User.dao.findById(getPara(0))); } @Before(UserValidator.class) public void update() { getModel(User.class).update(); redirect("/user"); } public void delete() { User.dao.deleteById(getParaToInt()); redirect("/user"); } }
package com.demo.user; import com.jfinal.core.Controller; import com.jfinal.validate.Validator; public class UserValidator extends Validator { @Override protected void validate(Controller c) { validateRequired("user.name", "nameMsg", "请输入姓名"); validateRequired("user.mz", "mzMsg", "请输入民族"); validateInteger("user.age",0,200,"ageIntMsg", "只能输入0到200之间的数字"); } @Override protected void handleError(Controller c) { c.keepModel(User.class); String actionKey = getActionKey(); if(actionKey.equals("/user/save")){ c.render("add.jsp"); }else if(actionKey.equals("/user/update")){ c.render("edit.jsp"); } } }
package com.demo.common; import com.demo.blog.Blog; import com.demo.blog.BlogController; import com.demo.user.User; import com.demo.user.UserController; 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.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.c3p0.C3p0Plugin; import com.jfinal.render.ViewType; /** * API引导式配置 */ public class DemoConfig extends JFinalConfig { /** * 配置常量 */ public void configConstant(Constants me) { loadPropertyFile("a_little_config.txt"); // 加载少量必要配置,随后可用getProperty(...)获取值 me.setDevMode(getPropertyToBoolean("devMode", false)); me.setViewType(ViewType.JSP); // 设置视图类型为Jsp,否则默认为FreeMarker } /** * 配置路由 */ public void configRoute(Routes me) { me.add("/", CommonController.class); me.add("/blog", BlogController.class); me.add("/user", UserController.class); } /** * 配置插件 */ public void configPlugin(Plugins me) { // 配置C3p0数据库连接池插件 C3p0Plugin c3p0Plugin = new C3p0Plugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password").trim()); me.add(c3p0Plugin); // 配置ActiveRecord插件 ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin); me.add(arp); arp.addMapping("blog", Blog.class); // 映射blog 表到 Blog模型 arp.addMapping("user", User.class); // 映射blog 表到 Blog模型 } /** * 配置全局拦截器 */ public void configInterceptor(Interceptors me) { } /** * 配置处理器 */ public void configHandler(Handlers me) { } /** * 运行此 main 方法可以启动项目,此main方法可以放置在任意的Class类定义中,不一定要放于此 */ public static void main(String[] args) { JFinal.start("WebRoot", 80, "/", 5); } }
package com.demo.common; import com.jfinal.core.Controller; /** * CommonController */ public class CommonController extends Controller { public void index() { render("/common/index.jsp"); } }
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xml:lang="zh-CN" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <link href="/css/manage.css" media="screen" rel="stylesheet" type="text/css" /> <script src="/js/jquery-1.4.4.min.js" type="text/javascript"></script> <script> function nextPage(pageNumber){ $("#queryForm").attr("action","/user/nextPage/"+pageNumber); $("#queryForm").submit(); } function prePage(pageNumber){ $("#queryForm").attr("action","/user/prePage/"+pageNumber); $("#queryForm").submit(); } function jumpPage(pageNumber){ $("#queryForm").attr("action","/user/jumpPage/"+pageNumber); $("#queryForm").submit(); } function onQuery(){ $("#queryForm").attr("action","/user/query"); $("#queryForm").submit(); } function onRest(){ $("#tj").val(""); onQuery(); } </script> </head> <body> <div> <%@ include file="/common/header.jsp"%> <form action="" id="queryForm" method="post" > <div> <h1> 人员管理 <a href="/user/add">创建人员</a> </h1> <h1> 查询条件: <input type="text" id="tj" name="user.tj" value="${user.tj }" /> <input type="button" value="查询" onclick="onQuery()" /> <input type="button" value="重置" onclick="onRest()" /> </h1> <div> <table> <tbody> <tr> <th>序号</th> <th>姓名</th> <th>年龄</th> <th>民族</th> <th></th> </tr> <c:forEach items="${userPage.list}" var="item" varStatus="s"> <tr > <td style="text-align: left;">${s.index+1 + (userPage.pageNumber-1) * userPage.pageSize}</td> <td style="text-align: left;">${item.name}</td> <td style="text-align: left;">${item.age}</td> <td style="text-align: left;">${item.mz}</td> <td style="text-align: left;"> <a href="/user/delete/${item.id}">删除</a> <a href="/user/edit/${item.id}">修改</a> </td> </tr> </c:forEach> </tbody> </table> </div> <div style="height: 3px;"> <span>第${userPage.pageNumber}页</span> <span><a href="javascript:jumpPage(1);">首页</a></span> <span><a href="javascript:jumpPage(${userPage.totalPage});">尾页</a></span> <c:choose> <c:when test="${userPage.pageNumber == 1 && userPage.pageNumber * userPage.pageSize >= userPage.totalRow }"> <span>上一页</span> <span>下一页</span> </c:when> <c:when test="${userPage.pageNumber == 1 && userPage.pageNumber * userPage.pageSize < userPage.totalRow}"> <span>上一页</span> <span><a href="javascript:nextPage(${userPage.pageNumber});">下一页</a></span> </c:when> <c:when test="${userPage.pageNumber > 1 && userPage.pageNumber < userPage.totalPage }"> <span><a href="javascript:prePage(${userPage.pageNumber});">上一页</a></span> <span><a href="javascript:nextPage(${userPage.pageNumber});">下一页</a></span> </c:when> <c:otherwise> <span><a href="javascript:prePage(${userPage.pageNumber});">上一页</a></span> <span>下一页</span> </c:otherwise> </c:choose> <span>共${userPage.totalPage}页</span> <span>每页${userPage.pageSize}条记录</span> <span>共${userPage.totalRow}条记录</span> </div> </div> </form> </div> </body> </html>
主要代码就这么多,对于初学着 个人觉得 还是值得 看看的。也不知道怎么上传源码,有需要的留下邮箱吧。
**************************************************
优化一下分页吧 :
1,BaseController package com.demo.common; import com.jfinal.core.Controller; public class BaseController extends Controller { private Integer pageNo = new Integer(1); private Integer limit = new Integer(3); public Integer getPageNo() { if(getPara("pageNo") == null || "".equals(getPara("pageNo"))) return pageNo; return getParaToInt("pageNo"); } public Integer getLimit() { if ((this.limit == null) || ("".equals(this.limit))) this.limit = Integer.valueOf(3); return this.limit; } public void setLimit(Integer limit) { this.limit = limit; } }
2,SurveyController package com.demo.survey; import com.demo.common.BaseController; import com.jfinal.aop.Before; public class SurveyController extends BaseController { public void index() { setAttr("page", Survey.dao.paginate(getPageNo(), getLimit(),isParaBlank("tj"),getPara("tj",""))); setAttr("tj", getPara("tj")); render("survey.jsp"); } public void add() { } @Before(SurveyValidator.class) public void save() { getModel(Survey.class).save(); redirect("/survey"); } public void edit() { setAttr("survey", Survey.dao.findById(getPara(0))); } @Before(SurveyValidator.class) public void update() { getModel(Survey.class).update(); redirect("/survey"); } public void delete() { Survey.dao.deleteById(getParaToInt()); redirect("/survey"); } }
3,survey package com.demo.survey; import com.jfinal.plugin.activerecord.Model; import com.jfinal.plugin.activerecord.Page; /** * 问卷实体类 * @author xjt * private Integer id; private String title = "未命名"; private String preText = "上一步"; private String nextText = "下一步"; private String exitText = "退出"; private String doneText = "完成"; private Date createTime = new Date(); +----+-------+---------+----------+----------+----------+---------------------+ | id | title | pretext | nexttext | exittext | donetext | createtime |userid | +----+-------+---------+----------+----------+----------+---------------------+ * */ public class Survey extends Model<Survey>{ private static final long serialVersionUID = 1L; public static final Survey dao = new Survey(); //分页查询 public Page<Survey> paginate(int pageNumber, int pageSize ,Object...obj) { if((Boolean) obj[0]){ return paginate(pageNumber, pageSize, "select s.id as id ,s.title as title ,s.createtime as createtime ,u.name as name ", "from survey as s left join user as u on s.userid = u.id"); }else{ //条件查询 return paginate(pageNumber, pageSize, "select s.id as id ,s.title as title ,s.createtime as createtime ,u.name as name ", "from survey where title like ? " ,"%"+obj[1]+"%"); } } }
4,SurveyValidator package com.demo.survey; import com.jfinal.core.Controller; import com.jfinal.validate.Validator; public class SurveyValidator extends Validator { @Override protected void validate(Controller c) { validateRequired("survey.title", "titleMsg", "请输入问卷标题"); } @Override protected void handleError(Controller c) { c.keepModel(Survey.class); String actionKey = getActionKey(); if(actionKey.equals("/survey/save")){ c.render("add.jsp"); }else if(actionKey.equals("/survey/update")){ c.render("edit.jsp"); } } }
5,survey.jsp <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xml:lang="zh-CN" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <link href="/css/manage.css" media="screen" rel="stylesheet" type="text/css" /> <script src="/js/jquery-1.4.4.min.js" type="text/javascript"></script> <script> //查询 function onQuery(type){ jumpPage(type); $("#queryForm").attr("action","/survey"); $("#queryForm").submit(); } //分页 function jumpPage(type){ if(type == '+1'){//下一页 $("#pageNo").val(parseInt($("#pageNo").val()) + 1); }else if(type == '-1'){//上一页 $("#pageNo").val(parseInt($("#pageNo").val()) - 1); }else if(type == '1'){//首页 $("#pageNo").val(1); }else{//尾页 $("#pageNo").val(type); } } //重置 function onRest(){ $("#tj").val(""); onQuery('1'); } </script> </head> <body> <div> <%@ include file="/common/header.jsp"%> <form action="" id="queryForm" method="post" > <div> <h1> 调查问卷 <a href="/survey/add">新增问卷</a> </h1> <h1> 查询条件: <input type="text" id="tj" name="tj" value="${tj }" /> <input type="button" value="查询" onclick="onQuery()" /> <input type="button" value="重置" onclick="onRest()" /> </h1> <div style="height: 300px"> <table> <tbody> <tr> <th>序号</th> <th>问卷标题</th> <th>创建时间</th> <th>创建者</th> <th>操作</th> </tr> <c:forEach items="${page.list}" var="item" varStatus="s"> <tr > <td style="text-align: left;">${s.index+1 + (page.pageNumber-1) * page.pageSize}</td> <td style="text-align: left;">${item.title}</td> <td style="text-align: left;">${item.createtime}</td> <td style="text-align: left;">${item.name}</td> <td style="text-align: left;"> <a href="/survey/delete/${item.id}">删除</a> <a href="/survey/edit/${item.id}">修改</a> </td> </tr> </c:forEach> </tbody> </table> </div> <div style="height: 3px;"> <input type="hidden" name="pageNo" id="pageNo" value="${page.pageNumber}" /> <span>第${page.pageNumber}页</span> <span><a href="javascript:onQuery('1');">首页</a></span> <span><a href="javascript:onQuery(${page.totalPage});">尾页</a></span> <c:choose> <c:when test="${page.pageNumber == 1 && page.pageNumber * page.pageSize >= page.totalRow }"> <span>上一页</span> <span>下一页</span> </c:when> <c:when test="${page.pageNumber == 1 && page.pageNumber * page.pageSize < page.totalRow}"> <span>上一页</span> <span><a href="javascript:onQuery('+1');">下一页</a></span> </c:when> <c:when test="${page.pageNumber > 1 && page.pageNumber < page.totalPage }"> <span><a href="javascript:onQuery('-1'));">上一页</a></span> <span><a href="javascript:onQuery('+1');">下一页</a></span> </c:when> <c:otherwise> <span><a href="javascript:onQuery('-1');">上一页</a></span> <span>下一页</span> </c:otherwise> </c:choose> <span>共${page.totalPage}页</span> <span>每页${page.pageSize}条记录</span> <span>共${page.totalRow}条记录</span> </div> </div> </form> </div> </body> </html>
以后有优化在更新吧。准备做个jsp分页标签。