`

Struts2 实现分页(源码)!

阅读更多

          好久没好好写点东西了,最近一直在熟练Struts2的各种特性,和搭建机制。

然后搞了一个Struts2新闻发布,实现了对mysql数据库的增删改查,后台管理员登陆、注册,

数据库连接池,新闻分页,权限控制,xml验证框架。但是现在代码的封装,重用,耦合还是不够好。以后要一步步完善。

回头还打算把JQuery框架和Struts2整合一下,那就帅多了。今天也不打算的瑟太多,就讲讲

我写的Struts2分页吧。

          我的分页比较简单,没有那么复杂,还是先实现再优化丰富吧。网上这方面的例子很多,但是详细的并不多。我打算

整理一下我的实现方案,并且接合Struts2的标签实现分页。提供相关完整代码。望高手指教了。

 

环境:MyEclipse6.5+Mysql5+struts2.0.11

实现分页用到三个类,分别为NewsDao.java(接口),NewsDaoImpl.java(实现),ListAction.java(调用方法)。

当然还有配好连接池的Mysql连接辅助类。在此不做过多介绍。

NewsDao.java

<!---->package com.sy.dao;

import java.util.List;

import com.sy.vo.News;

public interface NewsDao {

        

    
public List<News> queryByPage(int pageSize,int pageNow);
    
    
public int count();
    
    
}

 

NewsDaoImpl.java

<!---->package com.sy.dao.impl;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import com.sy.dao.NewsDao;
import com.sy.util.DataBaseConnection;
import com.sy.util.StringUtil;
import com.sy.vo.News;

public class NewsDaoImpl implements NewsDao {
          
        
        
//获取分页新闻列表
    @SuppressWarnings("unchecked")
    
public List<News> queryByPage(int i,int pageSize){
        List
<News> newss=new ArrayList();
        
        PreparedStatement pstmt    
= null ;
        String sql                
= null ;
        ResultSet rs            
= null ;
        DataBaseConnection dbc    
= null ;
        dbc 
= new DataBaseConnection() ;

        sql 
= "select * from struts2new order by id asc limit " + i + "," + pageSize;
        
try
        {        
            
            pstmt 
= dbc.getConnection().prepareStatement(sql);
            
            rs 
= pstmt.executeQuery() ;
            
while(rs.next())
            {
                News news
=new News();
                news.setId(rs.getInt(
"id"));
                news.setName(rs.getString(
"name"));
                news.setTitle(rs.getString(
"title"));
                news.setDate(rs.getString(
"date"));
                news.setEmail(rs.getString(
"email"));
                news.setContent(rs.getString(
"content"));
                i
++;
                newss.add(news);
            }
            rs.close() ;
            pstmt.close() ;
        }
        
catch(Exception e)
        {
            System.out.println(e) ;
        }
        
finally
        {
            dbc.close();
        }
        
return newss;
    }
             
//查询总行数
    public int count() {
        
int intRowCount = 0;//总行数
        PreparedStatement pstmt    = null ;
        String sql                
= null ;
        ResultSet rs            
= null ;
        DataBaseConnection dbc    
= null ;
        dbc 
= new DataBaseConnection() ;

        sql 
= "select count(id) from struts2new order by id asc";
        
try
        {            
            pstmt 
= dbc.getConnection().prepareStatement(sql);
            rs 
= pstmt.executeQuery();
            rs.next();
//游标指向第一行
            intRowCount=rs.getInt(1);//取得总行数
            rs.close() ;
            pstmt.close() ;
        }
        
catch(Exception e)
        {
            System.out.println(e) ;
        }
        
finally
        {
            dbc.close();
        }
        
return intRowCount;
    }
}

ListAction.java

 

<!---->package com.sy.action;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.sy.dao.AdminDao;
import com.sy.dao.NewsDao;
import com.sy.dao.impl.AdminDaoImpl;
import com.sy.dao.impl.NewsDaoImpl;
import com.sy.vo.Admin;
import com.sy.vo.News;

public class ListAction extends ActionSupport {

    
private static final long serialVersionUID = 1L;
        
int i=1;//中间变量
    private int k;//储存最大页面数
    private int pageNow=1//页码数,初始为1
    private int pageSize = 5 ; //页面行数 
    private int intRowCount;//总行数
    private int intPageCount;//总页数
    private Admin admin;
    
private List<Admin> Adminss;
    
private News news;
    @SuppressWarnings(
"unchecked")
    
private List<News> Newss;
    
    
private int id;
    
private int aid;

    
public News getNews() {
        
return news;
    }

    
public void setNews(News news) {
        
this.news = news;
    }

    @SuppressWarnings(
"unchecked")
    
public List<News> getNewss() {
        
return Newss;
    }
    
public void setNewss(List<News> newss) {
        Newss 
= newss;
    }

    
public int getId() {
        
return id;
    }

    
public void setId(int id) {
        
this.id = id;
    }
    
public Admin getAdmin() {
        
return admin;
    }

    
public void setAdmin(Admin admin) {
        
this.admin = admin;
    }

    
public List<Admin> getAdminss() {
        
return Adminss;
    }

    
public void setAdminss(List<Admin> adminss) {
        Adminss 
= adminss;
    }
    
public int getAid() {
        
return aid;
    }

    
public void setAid(int aid) {
        
this.aid = aid;
    }

    
public int getPageNow() {
        
return pageNow;
    }

    
public void setPageNow(int pageNow) {
        
this.pageNow = pageNow;
    }

    
public int getPageSize() {
        
return pageSize;
    }

    
public void setPageSize(int pageSize) {
        
this.pageSize = pageSize;
    }
    
public int getIntRowCount() {
        
return intRowCount;
    }

    
public void setIntRowCount(int intRowCount) {
        
this.intRowCount = intRowCount;
    }

    
public int getIntPageCount() {
        
return intPageCount;
    }

    
public void setIntPageCount(int intPageCount) {
        
this.intPageCount = intPageCount;
    }
    
public int getK() {
        
return k;
    }

    
public void setK(int k) {
        
this.k = k;
    }
@SuppressWarnings(
"unchecked")
    @Override
//显示新闻列表
    public String execute() throws Exception {

        NewsDao npage
=new NewsDaoImpl();
        intRowCount
=npage.count();
        k
=(intRowCount + pageSize - 1/ pageSize;
        intPageCount 
= (intRowCount + pageSize - 1/ pageSize;//计算出总页数
        if(pageNow<1){
            pageNow
=1;
        }
        
        
if(pageNow > intPageCount)
             pageNow
=intPageCount;
             i 
= (pageNow -1)*pageSize;
        NewsDao nlist
=new NewsDaoImpl();
        
if(null!=nlist.queryByPage(i,pageSize)){
        Newss 
= nlist.queryByPage(i,pageSize);
            
return SUCCESS;
        }
else{
            
return "failure";
        }
    }
          ..
}

 

struts.xml

 

<!----><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"
>
<struts>
<package name="news" extends="struts-default">

..
<!-- 查看新闻列表 -->        
        
<action name="list" class="com.sy.action.ListAction">
            
<result>/listNews.jsp</result>
            
<result name="failure">/Showfailure.jsp</result>
        
</action>

</package>
</struts>

 

显示页面listNews.jsp

 

<!----><%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
    
String path = request.getContextPath();
    
String basePath = request.getScheme() + "://"
            
+ request.getServerName() + ":" + request.getServerPort()
            
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    
<head>
        
<base href="<%=basePath%>">
        
<title>My JSP 'index.jsp' starting page</title>
    
</head>
    
<body>



..


        
<center>
        共
<s:property value="intRowCount"/>记录&nbsp;&nbsp;
        第
<s:property value="pageNow"/>&nbsp;&nbsp;
         
<s:url id="url_pre" value="list.action">   
         
<s:param name="pageNow" value="pageNow-1"></s:param>   
     
</s:url>   
  
     
<s:url id="url_next" value="list.action">   
         
<s:param name="pageNow" value="pageNow+1"></s:param>   
     
</s:url>   
     
<s:iterator value="Newss" status="status">   
        
<s:url id="url" value="list.action">   
            
<s:param name="pageNow" value="pageNow"/>   
        
</s:url>   
     
</s:iterator>    
     
<s:if test="pageNow==1">
    
<s:a href="%{url_pre}">最前一页</s:a>
     
</s:if>
     
<s:else>
     
<s:a href="%{url_pre}">上一页</s:a>
     
</s:else>
     
<s:if test="pageNow==k">
     
<s:a href="%{url_next}">最后一页</s:a>
       
</s:if>
       
<s:else>
       
<s:a href="%{url_next}">下一页</s:a>
       
</s:else>
       
</center>
    
</body>
</html>

 

效果:

 

如果有疑问可以提出来,我会尽力答复,如果有更好的想法,欢迎交流,以上源码还不成熟,以后会优化。

 

施杨出品!!!谢绝盗版。转载注明。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics