Struts分页讲解与代码实例

chuan014 2007-02-05 01:37:09


Struts分页讲解与化码实例

分享一下,大家找找错误,提提意见,有用的着的兄弟 ,别忘了顶一下啊,,,

1 建立与你要查询数据库中的表字段相对应的Bean。这部分由我们熟悉的javaBean来充当。并在其中建立数据库查询方法,该方法需要一个ResultSet类型的参数,是一个静态函数,把ResultSet 中的每条记录装添到一个Bean中,然后保存到ArrayList中返回。在本例中为 XueShengBean 。
2 建立一个页面数据控制器:PageController 传入由上面返回的Arraylist ,当前页 ,返回一个只包含当前页的ArrayList
3建立控制器组件,这部分由Struts 中的Action来实现。主要负责将实例化数据Bean ,并利用返回的ArrayList对象,接收由视图传递而来的当前页参数。构造PageController,用pc中的方法 来返回一个只包含当前页的ArrayLIst 并放到request 里,发送到视图显示。
4建立视图组件,这部分由jsp来充当,为了不出现java 代码,我们使用Struts提供的标签库,主要负责从request中取出刚刚放入的对象,而实现分页显示。本例中为show.jsp.


实例代码

1 数据bean
package kaka;

import java.util.ArrayList;
import java.sql.ResultSet;
import org.apache.struts.action.ActionMessage;
import java.sql.SQLException;

public class XueShengBean {
private String xingming;
private String id;
private String xingbie;
private String beizhu;
private String xuehao;

public XueShengBean() {
}

public static ArrayList getArrayList(ResultSet rs) {
ArrayList al = new ArrayList();

try {
while (rs.next()) {

XueShengBean xSB = new XueShengBean();
xSB.setXuehao(rs.getString("xuehao"));
xSB.setXingming(rs.getString("xingming"));
xSB.setXingbie(rs.getString("xingbie"));
xSB.setBeizhu(rs.getString("beizhu"));
xSB.setId(rs.getString("id"));

al.add(xSB);

}
} catch (SQLException ex) {
System.out.println(ex.getMessage() + "读数据时出错");

}

return al;

}

public void setXingming(String xingming) {
this.xingming = xingming;
}

public void setId(String id) {
this.id = id;
}

public void setXingbie(String xingbie) {
this.xingbie = xingbie;
}

public void setBeizhu(String beizhu) {
this.beizhu = beizhu;
}

public void setXuehao(String xuehao) {
this.xuehao = xuehao;
}

public String getXingming() {
return xingming;
}

public String getId() {
return id;
}

public String getXingbie() {
return xingbie;
}

public String getBeizhu() {
return beizhu;
}

public String getXuehao() {
return xuehao;
}
}




...全文
1381 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongzhenni 2011-03-02
  • 打赏
  • 举报
回复
虽然我看这些有点吃力,但这个思想看起来不错!顶一下!
hyynet09 2010-02-04
  • 打赏
  • 举报
回复
不错!
suncheng_hong 2007-02-10
  • 打赏
  • 举报
回复
楼主,您这种是直接访问action,在action中得到数据集。
但是如果从form表单过来,也就是从jsp->action中。
怎么做额。
wanzyqyy 2007-02-10
  • 打赏
  • 举报
回复
不错,谢谢,帮顶!
suncheng_hong 2007-02-07
  • 打赏
  • 举报
回复
请问
jsValue是什么?
jianghuxiaoxiami 2007-02-07
  • 打赏
  • 举报
回复
mark
chuan014 2007-02-07
  • 打赏
  • 举报
回复
这个程序 用在记录不多的情况下,如果把ArrayLIst 写在sission 会更快,只是不能及时反应记录变化,,

记录要是很多的话,可以在取记录的时候做一下优化,只取需要的,,,我不想写了,
suncheng_hong 2007-02-07
  • 打赏
  • 举报
回复
学习一下。
syhan 2007-02-06
  • 打赏
  • 举报
回复
同意 s_topman(SQL love Linux! : )) 的,假想有上千万条记录¥……&%……&%……¥%……
liguiling_1986 2007-02-06
  • 打赏
  • 举报
回复
顶~~学习下
s_topman 2007-02-05
  • 打赏
  • 举报
回复
最好利用数据库驱动来做分页,你这样全部取出再选对应页面的数据,当数据量很大时会比较慢
ziyouzai 2007-02-05
  • 打赏
  • 举报
回复
学习
chuan014 2007-02-05
  • 打赏
  • 举报
回复
3 action 中部分代码

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

DataSource dataSource = null;
Connection conn = null;
ActionErrors ae = new ActionErrors();
ResultSet rs = null;
Statement stmt = null;


ArrayList v_al = new ArrayList();
Object myObject = null;
int currentPage = 1;
///////////////////////////////////////////////////////////////////////////////

try {
//取得数据库连接

dataSource = getDataSource(request, "A");

conn = dataSource.getConnection();
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
String sql = "select * from QGZX_xueshengshenqing";
rs = stmt.executeQuery(sql);

v_al = XueShengBean.getArrayList(rs);

} catch (Exception e) {

System.out.println("获得连接出错" + e.toString());
return (mapping.findForward("conniserror"));

} finally {
try {
rs.close();
stmt.close();
conn.close();
} catch (SQLException ex) {
}

}


////////////////////////////////////////////////////////////////////
currentPage = ut.TypeConver.stringToInt(request.getParameter(
"currentPage"));

System.out.println("当前页是" + currentPage);
db.PageController pageCon = new db.PageController();
v_al = pageCon.getPageArrayList(v_al, currentPage);

HttpSession js = request.getSession();
Integer jsVaule = (Integer) js.getAttribute("linkC");
if (jsVaule == null) {
jsVaule = new Integer(0);

} else {
jsVaule = new Integer(jsVaule.intValue() + 1);
}
js.setAttribute("linkC", jsVaule);

request.setAttribute("XueSheng", v_al);
request.setAttribute("pc", pageCon);
System.out.println("设置完,开始转移到 show");
return (mapping.findForward("show"));

}

4 显示部分

<logic:present name="pc" scope="request">
<logic:equal name="pc" property="hasTop" value="true">
<html:link page="/main.do" paramId="currentPage" property="1">第一页 </html:link>
</logic:equal>
<logic:equal name="pc" property="hasPrevious" value="true">
<html:link page="/main.do" paramId="currentPage" paramName="pc" paramProperty="nextPage">上一页 </html:link>
</logic:equal>
${pc.currentPage}

<logic:equal name="pc" property="hasNext" value="true">
<html:link page="/main.do" paramId="currentPage" paramName="pc" paramProperty="nextPage">下一页 </html:link>
</logic:equal>
<logic:equal name="pc" property="hasLast" value="true">
<html:link page="/main.do" paramId="currentPage" paramName="pc" paramProperty="totalPages">尾页 </html:link>
</logic:equal>
</logic:present>
chuan014 2007-02-05
  • 打赏
  • 举报
回复
2 PageController 控制器

package db;

import java.util.ArrayList;
import java.sql.ResultSet;
import java.util.HashMap;

/**
* <p>Title:分页代码—页面控制 </p>
*
* <p>Description:struts 分页代码—页面控制 </p>
* <p>Description:2007年2月4号凌晨写下此分页代码。
* 在Bean的使用上本来想用DynaBean,不过显示的时候,就不好办了。
* 感觉数据库字段改变不是太大吧,况且一个自己写一个封装数据的Bean
* 在程序别的地方,会省很多事。
*
* </p>
* <p>Copyright:www.efine66.com Copyright (c) 2007</p>
*
* <p>Company:efine </p>
* @author 杨川 www.efine66.com
* @version 1.0
*/
public class PageController {
public PageController() {

}


//////////////////////////////////////////////
int totalRows; //总行数
int pageSize = 1; //
int currentPage = 10; //当前页
int totalPages;
int nextPage;
int previousPage;

int pageStartRow; //请求记录开始位置
int pageEndRow; //
boolean hasNext = true; //
boolean hasPrevious = true; //
boolean hasTop = true; //
boolean hasLast = true; //
//////////////////////////////////////////////


/**
* getPageArrayList
* 实例化后,真接执行此函数,正确传递参数,即可完成所有设置,与页面控制
* 返回根据分面计算得到的ArrayList
* @param al ArrayList
* @param cp int
* @return ArrayList
*/
public ArrayList getPageArrayList(ArrayList al, int cp) {
setPageController(al, cp);
ArrayList alt = new ArrayList();
if (pageStartRow > 0) {
for (int i = pageStartRow; i <= pageEndRow; i++) {
System.out.println("al.get " + (i - 1));
alt.add(al.get(i - 1));
}

} else {
return null;

}

return alt;

}


/**
* getPageArrayList
* 多一条页面设置参数
* 实例化后,真接执行此函数,正确传递参数,即可完成所有设置,与页面控制,
* 返回根据分面计算得到的ArrayList
* @param al ArrayList
* @param cp int
* @param pageSize int
* @return ArrayList
*/
public ArrayList getPageArrayList(ArrayList al, int cp, int pageSize) {
setPageController(al, cp, pageSize);
ArrayList alt = new ArrayList();
if (pageStartRow > 0) {
for (int i = pageStartRow; i <= pageEndRow; i++) {
System.out.println("al.get " + (i - 1));
alt.add(al.get(i - 1));
}

} else {
return null;

}

return alt;

}


/////////////////////////////以下公有获取页面状态的函数////////////////////////
public int getCurrentPage() {
return currentPage;
}

public boolean getHasNext() {
return hasNext;
}

public boolean getHasPrevious() {
return hasPrevious;
}

public boolean getHasTop() {
return hasTop;
}

public boolean getHasLast() {
return hasLast;
}

public int getNextPage() {
return nextPage;
}

public int getPreviousPage() {
return previousPage;
}

public int getTotalPages() {
return totalPages;
}


public String getD() {
String description = "Total:" + totalRows +
" items " + totalPages +
" pages,Current page:" +
this.currentPage + " Previous " +
this.hasPrevious +
" Next:" + this.hasNext +
" start row:" + this.pageStartRow +
" end row:" + this.pageEndRow;
return description;
}


/////////////////////////////以下私用工具函数////////////////////////

/**
* setPageController
* 设置本类的所有参数
* @param al ArrayList
* @param cp int
*/
private void setPageController(ArrayList al, int cp) {
//以下几条程序顺序不可改变
setTotal_Rows_Pages(al.size()); //设置记录总数,总页数
setCurrentPage(cp); //设置当前页数

setPageStart_EndRow(); //生成开始记录位置,结束记录位置
set_Next_Previous_Top_Last(); //生成 下一页 上一页 第一页 最后一页 标志

}

/**
* setPageController
* 多一条,页面大小的设置
* @param al ArrayList
* @param cp int
* @param pageSize int
*/
private void setPageController(ArrayList al, int cp, int pageSize) {
this.pageSize = pageSize;
setPageController(al, cp);

}

private void setCurrentPage(int i) {
if (i < 1) {
i = 1;
}
if (i > totalPages) {
i = totalPages;
}

currentPage = i;
nextPage = currentPage + 1;
previousPage = currentPage - 1;

}

private void setTotal_Rows_Pages(int size) {

totalRows = size;

if (size % pageSize == 0) {
totalPages = size / pageSize;
} else {
totalPages = size / pageSize + 1;
}

}

private void setPageStart_EndRow() {

if (currentPage * pageSize <= totalRows) {
pageEndRow = currentPage * pageSize;
pageStartRow = pageEndRow - pageSize + 1;
} else {
pageEndRow = totalRows;
pageStartRow = currentPage * pageSize - pageSize + 1;

}

}

private void set_Next_Previous_Top_Last() {
if (nextPage > totalPages) {
hasNext = false;
}
if (previousPage < 1) {
hasPrevious = false;
}
if (currentPage == 1) {
hasTop = false;

}
if (currentPage == totalPages) {
hasLast = false;
}

}


}






第1篇Struts 基础入门 6 第1章 Struts概述 8 1.1 JSP Framework - Struts介绍 8 1.2 Struts的体系结构 8 1.3 Struts1.0学习文档 8 1.3 JSP流行模板Struts的安装配置 8 1.4Struts 用户指南 8 1.5 你的第一个struts应用程序 8 第2章深入Struts结构 8 2.1人介绍应用框架 mvc和model2 8 2.2 Struts原理、开发及项目实施 8 2.3使用STRUST控制流 8 2.4讨论STRUTS的优缺点 9 2.5 Struts入门经验 9 2.6用strtus制作登陆页面: 9 第3章Struts 基础学习 9 3.1Struts标记库 9 3.2Struts框架基础篇 9 3.3Struts-config.xml配置文件讲解 3.4struts中文问题","struts国际化问题"??终极解决方案 9 3.5为 Web 服务构建 Struts 应用程序 9 3.6Struts标记库是如何工作的 9 3.7Struts 9 3.8struts简单例子的分析(含代码注释和配置文件说明) 9 3.9本章小结 10 第4章 配置STRUTS组件 10 4.1 Web 应用部署描述符 10 4.2 STRUTS配置文件 10 4.3 应用资源文件 10 4.4 ANT的构建文件 10 4.5 struts中的日志 10 4.6 运用你的struts 10 第5章 理解ActionForm 10 5.1 ActionForm的生命周期 10 5.2 ActionForm的作用 11 5.3 ActionForm的实践 11 5.4 组装ActionForm 11 5.5 Struts的动态表单的应用 11 第2篇 struts的执行 12 第6章 理解ActionForward 12 6.1 ActionForward 的最佳实践 12 6.2 使用运行时参数 12 6.3 使用动态转发 12 第7章 设计ActionMapping 12 7.1 理解ActionMapping 12 7.2 定义ActionMapping属性 12 7.3 使用局部和全局ActionForward 12 第8章 设计、使用Action 12 8.1 理解Action 12 8.2 使用基本的Action 13 8.3 Action的实践 13 8.4 Struts中的Action类的工作机制; 13 8.5 Struts中不同的Action和ActionForm组合 13 第9章Struts内置机制 13 9.1 Struts内置类DispatchAction 13 9.2 Struts内置类ForwardAction 13 9.3 Struts令牌机制,防止重复提交 13 9.4 StrutsAction单态陷阱,请谨慎使用全局变量 13 9.5 Struts异常处理 13 第10章 struts中使用国际化(i18n) 13 10.1 struts国际化程序尝试 13 10.1 Java对i18n的支持 14 10.1 struts框架中对国际化的支持 14 第11章 Validator验证框架 14 11.1 安装和配置Validator验证框架 14 11.1 Validator框架和Struts客户化标签 14 11.1 在Validator框架中使用JavaScript 14 11.1 在struts中用validator作服务器端验证 14 第12章 Struts HTML标签库 14 12.1 Struts中基本的HTML标签 14 12.1 Struts中表单处理的HTML标签 14 12.1 Struts中复选框和单选框的HTML标签 14 12.1 Struts下JSP页面传递复选框值技巧 15 12.1 Struts中下拉和选取/选项列表的HTML标签 15 12.1 Struts中html:errors的HTML标签 15 12.1 Struts中使用标签上传文件 15 第13章 Struts Bean标签库 15 13.1 如何获得Servlet上下文的有关内容 15 13.1 如何获得Java资源 15 13.1 如何获得Bean属性 15 13.1 使用Struts Bean标签保存与传输数据小实例 15 第14章 Struts Logic标签库 15 14.1 如何使用Logic标签进行基于值的条件显示 15 14.1 如何使用Logic标签进行字符串匹配 15 14.1 如何使用Logic标签来检测值是否存在 15 14.1 如何使用Logic标签来迭代 16 14.1 如何使用Logic标签标记来转移控制 16 14.1 在hello.jsp中使用Struts Logic标签库 16 第15章 Tiles标签库 16 15.1 struts中使用tiles组件 16 15.1 Tiles使用入门 16 第3篇 案例精讲 16 第16章 Struts分页显示 16 16.1 建立数据库 16
网上这本书的电子版不好这,这是用money换来的——和大家分享! 由于书太大,我把书分成两部分别上传。 内容简介 本书系统全面地介绍了Java中的各项主流技术,以及基于这些技术的商业化应用程序的开发技巧,在讲解过程中以目前最为流行的开发工具MyEclipse为载体,全面系统地介绍了如何在MyEclipse中开发基于Struts、Hibernate、Spring等主流框架的各种Java应用程序。 本书内容主要来自作者多年的软件开发和教学、培训经验,通过实例由浅入深地介绍MyEclipse的基本应用,是一本强调实践技能的实用性指导图书。 本书内容丰富、技术全面、案例实用,而且所有的实例都以MyEclipse工程的形式组织,并按章节的顺序组织在附书光盘中,源代码工程都经过精心调试,可以直接导入MyEclipse中运行。 本书内容精练、重点突出、实例丰富,是Java程序开发人员必备的参考书,同时也可作为高等院校计算机及相关专业的教材。 图书目录 第1章 初识MyEclipse 1 1.1 MyEclipse简介 1 1.2 MyEclipse的安装 1 1.2.1 JDK的安装与配置 1 1.2.2 MyEclipse 7.0的安装和运行 4 1.3 获取和阅读MyEclipse帮助文档 5 1.4 本章小结 5 第2章 MyEclipse集成开发环境的使用 6 2.1 MyEclipse集成开发工具界面 6 2.1.1 MyEclipse的菜单栏 7 2.1.2 MyEclipse的工具栏 13 2.1.3 MyEclipse的透视图 14 2.1.4 MyEclipse的视图 17 2.1.5 MyEclipse的编辑器 20 2.1.6 MyEclipse的Tasks视图 22 2.1.7 MyEclipse的Bookmarks视图 24 2.2 MyEclipse中的资源管理 26 2.2.1 MyEclipse中的工作空间 26 2.2.2 MyEclipse中的Navigator视图 27 2.3 定制MyEclipse的工作台 33 2.3.1 定制工作台外观 34 2.3.2 定制快捷键 35 2.3.3 定制编辑器 36 2.3.4 定制工作台公共设置 36 2.4 MyEclipse中常用操作 36 2.4.1 配置JRE 36 2.4.2 设置编译路径 37 2.4.3 设置项目属性 38 2.5 本章小结 39 第3章 Java程序的开发 40 3.1 使用JDT编写Java项目 40 3.2 MyEclipse中的Java代码编辑器 43 3.2.1 Java代码编辑器基本功能 43 3.2.2 自定义Java代码编辑器 45 3.2.3 Java代码编辑器相关视图 50 3.3 MyEclipse中的Java代码编译器 51 3.4 MyEclipse中的Java代码调试器 52 3.4.1 Java项目的运行 52 3.4.2 Java项目的调试 53 3.5 MyEclipse中的Java代码搜索器 57 3.5.1 搜索功能 57 3.5.2 查找功能 58 3.6 MyEclipse中的Java代码重构支持 59 3.6.1 Java元素重命名 59 3.6.2 Java元素移动 60 3.6.3 Java元素复制 61 3.7 本章小结 61 第4章 Java开发的版本控制及SVN 62 4.1 版本控制与SVN 62 4.2 SVN服务器的安装与配置 62 4.3 MyEclipse连接SVN服务器 63 4.3.1 配置MyEclipse连接SVN服务器 63 4.3.2 将SVN服务器中的项目导入到MyEclipse 64 4.3.3 将MyEclipse中的项目提交到SVN服务器 65 4.4 本章小结 67 第5章 Java开发项目的软件测试工具——JUnit 68 5.1 软件测试简介 68 5.2 JUnit简介 68 5.2.1 JUnit的特点 69 5.2.2 JUnit的常用类和接口 69 5.3 在MyEclipse中设置JUnit 71 5.4 JUnit测试 72 5.4.1 JUnit测试用例 72 5.4.2 JUnit测试套件 75 5.5 JUnit应用实例:数据库程序单元测试 77 5.6 本章小结 80 第6章 Java Web应用程序的开发 81 6.1 Java Web应用程序概述 81 6.2 Tomcat服务器的安装和配置 82 6.2.1 Tomcat服务器的下载 82 6.2.2 Tomcat服务器

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧