Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88873
  • 博文数量: 29
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 281
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-02 18:00
文章分类
文章存档

2014年(29)

我的朋友

分类: Java

2014-01-13 14:13:31

Java_自定义标签_分页标签

此分页标签总共有7个属性,都是必有的属性,

1、pageSize(每页显示的条数);

2、pageNo(当前页对象,用于分页);

3、url(分页跳转的路径,一般为servlet的路径);

4、name(在路径中分页模型存放的作用域的属性名);

5、scope(作用域);

6.value(实体对象名,便于用EL表达式打印数据);

7、colspan(要跨的行数,用于分页哪一行与数据行统一)

(注:使用时一定要导入标签的路径,会写自定义标签的应该知道,此标签写着玩的,没什么商业价值,有什么问题可以一起讨论哈!奋斗)

代码如下:

1、标签处理类:(要继承TagSupport或BodyTagSupport,还需要重写父类中的方法)

public class PageTag extends TagSupport{

//定义标签的属性
private String pageNo;//当前页
private int pageSize;//每页显示的条数
private String name;//分页模型属性名
private String url;//路径
private String colspan;//要跨的行数
private String scope;//模型是从什么作用域中取出来的
private String value;//实体对象

//创建分页模型对象
PageModel pm = null;
//创建迭代器对象
Iterator iter =null;

@Override
public int doStartTag() throws JspException {

//判断模型是放在什么作用域中,并取出
Object obj = null;
if("page".equals(scope))
{
obj = pageContext.getAttribute(name,pageContext.PAGE_SCOPE);
}
if("request".equals(scope))
{
obj = pageContext.getAttribute(name,pageContext.REQUEST_SCOPE);
}
if("session".equals(scope))
{
obj = pageContext.getAttribute(name,pageContext.SESSION_SCOPE);
}
if("application".equals(scope))
{
obj = pageContext.getAttribute(name,pageContext.APPLICATION_SCOPE);
}

//将取出的值付给分页模型
pm = (PageModel)obj;
//从分页模型中取出集合
List list = pm.getList();
//使用迭代器把值取出来
iter= list.iterator();
if(iter.hasNext())
{
//把值放到实体对象中
pageContext.setAttribute(value, iter.next());
return EVAL_BODY_INCLUDE;
}else{
return SKIP_BODY;
}
}
@Override
public int doAfterBody() throws JspException {
if(iter.hasNext())
{
pageContext.setAttribute(value, iter.next());
return EVAL_BODY_AGAIN;
}else{
return SKIP_BODY;
}
}
@Override
public int doEndTag() throws JspException {
// 进行分页
//创建输出流对象
JspWriter out  = pageContext.getOut();
try {
String href = url+"?pageSize="+this.pageSize+"&"+this.pageNo+"=";

out.print("第"+pm.getPageNo()+"/"+pm.getPageTotal()+"页   ");
out.print("首页   上一页    下一页   尾页");
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
//标签属性的封装(生成每个属性的get和set方法,我就不一一写了)

如:
public String getPageNo() {
return pageNo;
}
public void setPageNo(String pageNo) {
this.pageNo = pageNo;
}

}

2、标签库描述文件:(此文件必须放在WEB-INF文件夹中)


1.0
1.2
pt
!--标签路径-->


 pageTag
 taozi.tag.PageTag
 jsp

 
 
 
 pageNo
 true
 true
 


 
 
 pageSize
 true
 true
 


 
 
 name
 true
 true
 


 
 
 url
 true
 true
 


 
 
 colspan
 true
 true
 


 
 
 scope
 true
 true
 


 
 
 value
 true
 true
 




3、通用的分页模型:

public class PageModel {

/**
* 定义属性
*/
//定义当前页数
int pageNo=1;
//定义当前页数显示的条数
int pageSize=5;
//定义总条数
int count;
//定义显示的集合
List list;

String keyWords;//定义要查询的内容

/**
* 定义方法(首页,上一页,下一页,尾页)
* @return
*/
//首页
public int getPageIndex()
{
return 1;
}
//尾页
public int getPageTotal()
{
int pageTotal=this.count%this.pageSize;
if(pageTotal==0)
{
pageTotal=this.count/this.pageSize;
}
else
{
pageTotal=this.count/this.pageSize+1;
}
return pageTotal;
}
//上一页
public int getPagePre()
{
int pagePre=this.pageNo-1;
if(pagePre<1)
{
pagePre=1;
}
return pagePre;
}
//下一页
public int getPageNext()
{
int pageNext=this.pageNo+1;
if(pageNext>this.getPageTotal())
{
pageNext=this.getPageTotal();
}
return pageNext;
}

//属性的封装(生成每个属性的get和set方法,我就不一一写了)

如:
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
}


4、Dao类中:

public class UserInfoDao {

static Connection conn=null;
static PreparedStatement pstmt=null;
static ResultSet rs=null;
/**
* 查询数据
* @param pageSize每页显示的条数
* @param pageNo当前页
* @return
*/
public PageModel selectStudentFenYe(int pageSize,int pageNo)
{
//创建分页模型对象
PageModel pm = new  PageModel();
List list = new ArrayList();
try {
//打开连接
conn=DB.getConn();
//创建操作对象
String sql="select top "+pageSize+" * from UserInfo where id not in(select top (("+pageNo+"-1)*"+pageSize+") id from UserInfo)";
pstmt = conn.prepareStatement(sql);
//执行
rs=pstmt.executeQuery();
//循环遍历
while(rs.next())
{
UserInfo u = new UserInfo(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getInt(4));
list.add(u);
}
//将查询出来的信息保存早分页模型中
pm.setCount(this.selectStudentcount());
pm.setList(list);
pm.setPageNo(pageNo);
pm.setPageSize(pageSize);
pm.setKeyWords(null);
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭连接
DB.close(rs, pstmt, conn);
}
return pm;
}
/**
* 查询总条数
* @return
*/
public int selectStudentcount()
{
String sql="select COUNT(*) from UserInfo";
return SelectCount.selectCount(sql);
}

}

5、Servlet中:


public class UserServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//处理中文乱码
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//定义每页显示的条数和当前页
int pageSize = 3;
int pageNo = 1;
//接收每页显示的条数
String pageSizes = request.getParameter("pageSize");
if(pageSizes!=null && !"".equals(pageSizes))
{
pageSize = Integer.parseInt(pageSizes);
}
//接收当前页
String pageNos = request.getParameter("pageNo");
if(pageNos!=null && !"".equals(pageNos))
{
pageNo = Integer.parseInt(pageNos);
}
//创建dao类对象
UserInfoDao udao = new UserInfoDao();
//创建分页模型对象,并从dao类中取出模型值
PageModel pm = udao.selectStudentFenYe(pageSize, pageNo);
//将分页模型存放到request中
request.setAttribute("pm", pm);
//内部跳转到分页页面
request.getRequestDispatcher("paging.jsp").forward(request, response);

}
}

6、适用标签(在使用时一定要导入标签路径)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri="" prefix="taozi" %>

 

分页信息如下


















编号 姓名 性别 年龄
${u.id } ${u.name } ${u.sex } ${u.age }
阅读(1322) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~