一 開發環境
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<pageRecorders)
{
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<totalRows){//判斷是否為最后一頁
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<pageEndRow;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
<%@ 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";
}
posted on 2007-08-09 01:01
末日風情 閱讀(979)
評論(2) 編輯 收藏 所屬分類:
struts