先看效果图
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分页标签。