好久没好好写点东西了,最近一直在熟练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 {
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
public List < News > queryByPage( int pageSize, int pageNow);
public int count();
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
}
import java.util.List;
import com.sy.vo.News;
public interface NewsDao {
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
public List < News > queryByPage( int pageSize, int pageNow);
public int count();
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
}
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 {
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
// 获取分页新闻列表
@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;
}
}
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 {
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
// 获取分页新闻列表
@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 " ;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
..
}
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 " ;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
}
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 >
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
</ package >
</ struts >
<! 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" >
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
<!-- 查看新闻列表 -->
< action name ="list" class ="com.sy.action.ListAction" >
< result > /listNews.jsp </ result >
< result name ="failure" > /Showfailure.jsp </ result >
</ action >
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
</ 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 >
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
..
< center >
共 < s:property value ="intRowCount" /> 记录
第 < s:property value ="pageNow" /> 页
< 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 >
<% @ 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 >
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
< center >
共 < s:property value ="intRowCount" /> 记录
第 < s:property value ="pageNow" /> 页
< 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 >
效果:
如果有疑问可以提出来,我会尽力答复,如果有更好的想法,欢迎交流,以上源码还不成熟,以后会优化。
施杨出品!!!谢绝盗版。转载注明。