分享
 
 
 

[原创]彻底解决Struts分页显示

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

彻底解决Struts分页显示

作者:李敏强 eMail: mill_lmq@tom.com

学习Struts已经有2个多月了,前几天群里的朋友问我Struts分页显示的问题,觉得好像与在jsp中的差不多,但还是遇到了这样那样的问题,好不容易花了几天时间把问题都搞清楚,觉得还是写点东西跟大家分享一下的好!

至于Struts的语法这里就不多介绍了,不懂的朋友可以先看网上的其他文章。

一 开发环境

Elicpse+Struts Studio+SqlServer2000+Tomcat。

二 开发思路

既然讲的是Struts,那自然离不了MVC,分页显示也是如此。

1 建立适当的模型组件,对应你要查询数据库中的表。这部分由我们熟悉的javaBean来充当。并在其中建立数据库查询方法,该方法需要一个java.sql.Conntection类型的参数,并返回一个ArrayList。在本例中为 Book.java

2 建立分页所需要的模型组件,也是由javaBean来充当,通过由Book中提供的ArrayList来构造。本例中为 PageBean.java.。

3建立控制器组件,这部分由Struts 中的Action来实现。主要负责将实例化Book,并利用返回的ArrayList对象,构造PageBean。以及接收由视图传递而来的action参数。从而在PageBean对象中调用不同的方法,该方法返回Book[] 对象。最后将 Book[]和PageBean放入request中。本例中为PageListAction.java。

4建立视图组件,这部分由jsp来充当,为了不出现java 代码,我们使用Struts提供的标签库,主要负责从request中取出刚刚放入的对象,通过反复调用PageListAction以及action参数,而实现分页显示。本例中为pagetest.jsp.

5 建立并配置struts-config.xml。

6 建立数据库。

三 实例代码

1 Book.java

package bean;

import java.sql.*;

import java.util.ArrayList;

/**

* @作者 李敏强

* Struts分页显示数据Bean,对应数据库中Book表

*/

public class Book {

private String bookname; //书名

private String author; //作者

private String price; //价格

public Book(String name,String author,String price){

this.bookname=name;

this.author=author;

this.price=price;

}

public String getAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

public String getBookname() {

return bookname;

}

public void setBookname(String bookname) {

this.bookname = bookname;

}

public String getPrice(){

return this.price;

}

public void setPrice(String price){

this.price=price;

}

public static ArrayList getAllBook(Connection connection){

String sql="select * from book";

ArrayList arrayList = new ArrayList();

try{

Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSet resultSet = statement.executeQuery(sql);

System.out.println("BookBean 数据查询已完成!");

while(resultSet.next())

{

String name = resultSet.getString("name");

String author = resultSet.getString("author");

String price = resultSet.getString("price");

System.out.println("开始数据封装:name="+name+"author="+author+"price="+price);

Book book = new Book(name,author,price);

arrayList.add(book);

}

connection.close();

resultSet.close();

}catch(SQLException e)

{

System.out.println("数据库异常"+e.toString());

}

return arrayList;

}

}

2 PageBean.java

package page;

import bean.Book;

import java.util.*;

/**

* @作者 李敏强

* Struts分页显示逻辑Bean

*/

public class PageBean {

int currentPage=1; //当前页

public int totalPages=0; //总页数

int pageRecorders=5;//每页5条数据

int totalRows=0; //总数据数

int pageStartRow=0;//每页的起始数

int pageEndRow=0; //每页显示数据的终止数

boolean hasNextPage=false; //是否有下一页

boolean hasPreviousPage=false; //是否有前一页

ArrayList arrayList;

Iterator it;

public PageBean(){}

public PageBean(ArrayList arrayList){

this.arrayList=arrayList;

totalRows=arrayList.size();

it=arrayList.iterator();

hasPreviousPage=false;

currentPage=1;

if((totalRows%pageRecorders)==0)

{

totalPages=totalRows/pageRecorders;

}

else

{

totalPages=totalRows/pageRecorders+1;

}

if(currentPage>=totalPages)

{

hasNextPage=false;

}

else

{

hasNextPage=true;

}

if(totalRows

{

this.pageStartRow=0;

this.pageEndRow=totalRows;

}

else

{

this.pageStartRow=0;

this.pageEndRow=pageRecorders;

}

}

/**

* @return Returns the currentPage.

*/

public String getCurrentPage() {

return this.toString(currentPage);

}

/**

* @param currentPage The currentPage to set.

*/

public void setCurrentPage(int currentPage) {

this.currentPage = currentPage;

}

/**

* @return Returns the pageRecorders.

*/

public int getPageRecorders() {

return pageRecorders;

}

/**

* @param pageRecorders The pageRecorders to set.

*/

public void setPageRecorders(int pageRecorders) {

this.pageRecorders = pageRecorders;

}

/**

* @return Returns the pageEndRow.

*/

public int getPageEndRow() {

return pageEndRow;

}

/**

* @return Returns the pageStartRow.

*/

public int getPageStartRow() {

return pageStartRow;

}

/**

* @return Returns the totalPages.

*/

public String getTotalPages() {

return this.toString(totalPages);

}

/**

* @return Returns the totalRows.

*/

public String getTotalRows() {

return this.toString(totalRows);

}

/**

* @return Returns the hasNextPage.

*/

public boolean isHasNextPage() {

return hasNextPage;

}

/**

* @param hasNextPage The hasNextPage to set.

*/

public void setHasNextPage(boolean hasNextPage) {

this.hasNextPage = hasNextPage;

}

/**

* @return Returns the hasPreviousPage.

*/

public boolean isHasPreviousPage() {

return hasPreviousPage;

}

/**

* @param hasPreviousPage The hasPreviousPage to set.

*/

public void setHasPreviousPage(boolean hasPreviousPage) {

this.hasPreviousPage = hasPreviousPage;

}

public Book[] getNextPage(){

currentPage=currentPage+1;

System.out.println("PageBean.getNextPage()正在执行;");

System.out.println("参数currentPage="+currentPage);

if((currentPage-1)>0)

{

hasPreviousPage=true;

}

else

{

hasPreviousPage=false;

}

if(currentPage>=totalPages)

{

hasNextPage=false;

}

else

{

hasNextPage=true;

}

System.out.println("参数hasNextPage="+hasNextPage);

System.out.println("准备执行PageBean.getBooks()");

Book[] books=getBooks();

this.description();

return books;

}

public Book[] getPreviouspage(){

currentPage=currentPage-1;

if(currentPage==0){currentPage=1;}

if(currentPage>=totalPages)

{

hasNextPage=false;

}

else

{

hasNextPage=true;

}

if((currentPage-1)>0)

{

hasPreviousPage=true;

}

else

{

hasPreviousPage=false;

}

Book[] books=getBooks();

this.description();

return books;

}

public Book[] getBooks(){

System.out.println("pageBean.getBooks()开始执行;");

if(currentPage*pageRecorders判断是否为最后一页

pageEndRow=currentPage*pageRecorders;

pageStartRow=pageEndRow-pageRecorders;

}

else{

pageEndRow=totalRows;

pageStartRow=pageRecorders*(totalPages-1);

}

Book[] books=new Book[pageEndRow-pageStartRow+1];

System.out.println("pageStartRow="+pageStartRow);

System.out.println("pageEndRow="+pageEndRow);

int j=0;

for(int i=pageStartRow;i

{

Book book=(Book)arrayList.get(i);

books[j++]=book;

}

System.out.println("要显示的页面数据已经封装,具体信息如下:");

this.description();

return books;

}

public String toString(int temp)

{

String str=Integer.toString(temp);

return str;

}

public void description()

{

String description="共有数据数:"+this.getTotalRows()+

"共有页数: "+this.getTotalPages() +

"当前页数为:"+this.getCurrentPage()+

" 是否有前一页: "+this.isHasPreviousPage() +

" 是否有下一页:"+this.isHasNextPage()+

" 开始行数:"+this.getPageStartRow()+

" 终止行数:"+this.getPageEndRow();

System.out.println(description);

}

}

3 PageListAction.java

package page;

import org.apache.struts.action.*;

import javax.servlet.http.*;

import comm.Constants;

import bean.Book;

import java.util.*;

import javax.sql.DataSource;

/**

* @author 李敏强

* Struts分页显示Action

*/

public class PageListAction extends Action {

public PageListAction(){}

ArrayList arrayList=new ArrayList();

PageBean pb;

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

String action;

action=request.getParameter("action");

if(action==null || action.equals("null")){ //第一次读取数据

try{

DataSource datasource=this.getDataSource(request,Constants.DATASOURCE_KEY);

arrayList=Book.getAllBook(datasource.getConnection());

System.out.println("第一步,数据已经成功传递到Action,action="+action);

}catch(Exception e){

e.printStackTrace();

System.out.println("数据库连接出现异常");

}

pb=new PageBean(arrayList);

Book[] books=pb.getBooks();

pb.description();

request.setAttribute("result",books);

request.setAttribute("page",pb);

}

else

{

if(action=="nextPage" || action.equals("nextPage"))

{

System.out.println("参数action="+action);

System.out.println("函数pb.getNextPage()准备执行");

Book[]books=pb.getNextPage();

request.setAttribute("page",pb);

request.setAttribute("result",books);

}

if(action=="previousPage" || action.equals("previousPage"))

{

System.out.println("参数action="+action);

System.out.println("函数pb.getPreviouspage()准备执行");

Book[] books=pb.getPreviouspage();

request.setAttribute("page",pb);

request.setAttribute("result",books);

}

}

return (mapping.findForward("success"));

}

}

4 pagetest.jsp

"/WEB-INF/struts-logic.tld" prefix="logic" %

"/WEB-INF/struts-bean.tld" prefix="bean" %

"/WEB-INF/struts-html.tld" prefix="html" %

"text/html; charset=gb2312" language="java"%

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<%@ page contentType="text/html; charset=gb2312" language="java"%>

<html:html locale="true">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<body>

<table border="1">

<tr><th>书名</th><th>作者</th><th>价格</th></tr>

<logic:present name="result">

<logic:iterate id="book" name="result" type="bean.Book" >

<logic:present name="book">

<tr>

<td><bean:write name="book" property="bookname" /></td>

<td> <bean:write name="book" property="author" /></td>

<td><bean:write name="book" property="price" /></td>

</tr>

</logic:present>

</logic:iterate>

</logic:present>

</table>

<logic:equal name="page" property="hasNextPage" value="true">

<html:link page="/page.do?action=nextPage">nextPage</html:link>

</logic:equal>

<logic:equal name="page" property="hasPreviousPage" value="true">

<html:link page="/page.do?action=previousPage">PreviousPage</html:link>

</logic:equal>

共有数据总数<bean:write name="page" property="totalRows"/>;

共分<bean:write name="page" property="totalPages"/>页,当前是第

<bean:write name="page" property="currentPage"/>页

</body>

</html:html>

5 struts-config.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"

"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>

<data-sources>

<data-source key="dataSource" type="org.apache.commons.dbcp.BasicDataSource">

<set-property property="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>

<set-property property="url" value="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=eBookStore;SelectMethod=cursor"/>

<set-property property="username" value="limq"/>

<set-property property="password" value="1"/>

<set-property property="maxActive" value="10"/>

<set-property property="maxWait" value="5000"/>

<set-property property="defaultAutoCommit" value="true"/>

<set-property property="defaultReadOnly" value="false"/>

</data-source>

</data-sources>

<form-beans>

</form-beans>

<global-forwards>

</global-forwards>

<action-mappings>

<action path="/page" type="page.PageListAction" scope="request">

<forward name="success" path="/pagetest.jsp"/>

</action>

</action-mappings>

<controller>

</controller>

</struts-config>

6 建立eBookStore数据库,以及表book(name,author,parce);其中数据的配置可以根据你的不同情况在struts-config.xml中而定。

7 Constants.java

package comm;

/**

* this interface provides the constant string for applicator constant

*/

public class Constants {

/**

* name of the User Object in HttpSession

*/

public static String USER_KEY="user";

/**

* dataSource name

*/

public static String DATASOURCE_KEY="dataSource";

}

好了,全部代码我已经贴完了,难免有不妥的地方,如果您有好的意见或者建议请跟我联系,在下将感激不尽!! mill_lmq@tom.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有