jfinal 之 初体验

先看效果图

222804_7cyq_860563.png

222812_3YNr_860563.jpg

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>
人员管理&nbsp;&nbsp; <a href="/user/add">创建人员</a>
</h1>
<h1>
查询条件:&nbsp;&nbsp; <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;">&nbsp;&nbsp;<a
href="/user/delete/${item.id}">删除</a> &nbsp;&nbsp;<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>

主要代码就这么多,对于初学着 个人觉得 还是值得 看看的。也不知道怎么上传源码,有需要的留下邮箱吧。


**************************************************

优化一下分页吧 :

002004_r3bJ_860563.png

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>
                调查问卷&nbsp;&nbsp; <a href="/survey/add">新增问卷</a>
            </h1>
            <h1>
                查询条件:&nbsp;&nbsp; <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;">&nbsp;&nbsp;<a
                                    href="/survey/delete/${item.id}">删除</a> &nbsp;&nbsp;<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分页标签。

转载于:https://my.oschina.net/u/860563/blog/219428

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值