strut1 分页详细代码
JSP分页显示代码
ShowRecordByPage.javapackage database.operation;import java.sql.*;import com.sun.rowset.*;public class ShowRecordByPage{ int pageSize=10; //每页显示的记录数int pageAllCount=0; //分页后的总页数int showPage=1 ; //当前显示页StringBuffer presentPageResult; //显示当前页内容CachedRowSetImpl rowSet; //用于存储ResultSet对象String databaseName="user"; //数据库名称String tableName="user_tab"; //表的名字String user="sa" ; //用户String password="123" ; //密码String 字段[]=new String[100] ;int 字段个数=0;public ShowRecordByPage(){ presentPageResult=new StringBuffer();try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newIns tance();}catch(Exception e){}}public void setPageSize(int size){ pageSize=size;字段个数=0;Stringuri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName="+databaseName;try{ Connectioncon=DriverManager.getConnection(uri,user,password);DatabaseMetaData metadata=con.getMetaData();ResultSet rs1=metadata.getColumns(null,null,tableName,null);int k=0;while(rs1.next()){ 字段个数++;字段[k]=rs1.getString(4); //获取字段的名字k++;}Statementsql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);ResultSet rs=sql.executeQuery("SELECT * FROM"+tableName);rowSet=new CachedRowSetImpl(); //创建行集对象rowSet.populate(rs);con.close(); //关闭连接st();int m=rowSet.getRow(); //总行数int n=pageSize;pageAllCount=((m%n)==0)?(m/n):(m/n+1);}catch(Exception exp){}}public int getPageSize(){ return pageSize;}public int getPageAllCount(){ return pageAllCount;}public void setShowPage(int n){ showPage=n;}public int getShowPage(){ return showPage;}public StringBuffer getPresentPageResult(){ if(showPage>pageAllCount)showPage=1;if(showPage<=0)showPage=pageAllCount;presentPageResult=show(showPage);return presentPageResult;}public StringBuffer show(int page){ StringBuffer str=new StringBuffer();str.append("<table border=1>");str.append("<tr>");for(int i=0;i<字段个数;i++){ str.append("<th>"+字段[i]+"</th>");}str.append("</tr>");try{ rowSet.absolute((page-1)*pageSize+1);for(int i=1;i<=pageSize;i++){ str.append("<tr>");for(int k=1;k<=字段个数;k++){ str.append("<td>"+rowSet.getString(k)+"</td>");}str.append("</tr>");rowSet.next();}}catch(SQLException exp){}str.append("</table>");return str;}public void setDatabaseName(String s){ databaseName=s.trim();}public String getDatabaseName(){ return databaseName;}public void setTableName(String s){ tableName=s.trim();}public String getTableName(){ return tableName;}public void setPassword(String s){ password=s.trim();;}public void setUser(String s){ user=s.trim();}public String getUser(){ return user;}}showByPage.jsp<%@ page contentType="text/html;charset=GB2312" %><%@ page import="java.sql.*" %><%@ page import="database.operation.*" %><jsp:useBean id="look" class="database.operation.ShowRecordByPage" scope="session" /><jsp:setProperty name="look" property="databaseName" value="factory" /><jsp:setProperty name="look" property="tableName" value="employee" /> <jsp:setProperty name="look" property="user" value="sa" /><jsp:setProperty name="look" property="password" value="sa" /><jsp:setProperty name="look" property="pageSize" value="2" /><HTML><BODY>数据库<jsp:getProperty name= "look" property="databaseName"/>中<jsp:getProperty name= "look" property="tableName"/>表的记录将被分页显示。
struts1学习笔记
struts1开发学习笔记使用一个简单的例子记录struts1开发过程。
0、 描述主要功能描述:index 界面上只有两个超链接,分别可以打开录入产品界面和显示产品列表界面。
newProduct.jsp 是录入的界面,searchProduct.jsp 是查询列表的界面。
ProductAction.java 是处理逻辑的action简单描述流程图:1、 构建环境在Myeclipse 中,新建一个工程StrutsTest ,选择该工程,右键Myeclipse->add srutscapapibality ,弹出界面,选择struts1.2支持。
如下图所示:添加完struts 支持后,lib 目录下会增添struts 的jar 包、增添struts 的配置文件:/WEB-INF/struts-config.xml 、同时在web.xml 中增添了struts 的配置。
2、 代码编写2)创建工具类Util.java,从数据库连接池中获得连接。
需要两个步骤第一步:在WebRoot/META-INF/下新建一个context文件,通过jndi方式配置数据源,第二步:在util类中读取配置获得连接,util.java如下:3)创建工具类EncodingFilter.java,自定义过滤器,并在web.xml中配置,参考web.xml配置中内容。
EncodingFilter.java的内容如下:4)修改web.xml,指定首页为index.jsp。
文件内容如下:最后定义了一个fileld 的过滤器,是用来过滤字符编码的,后面会提到。
6)index.jsp中提到productAction.action?method=viewAddForm,需要在在配置文件中配置了action的实现类,以及作为上传数据时用来保存数据的form:productForm10)searchProduct.jsp是查询结果界面,代码如下:http://localhost:8080/StrutsTest即可访问。
struts1 详解
01struts基础J2EE1.4ServletJspJDBCJTA(Java Transaction API)JPA(Java persistence API)---EJBJavaMailJSTLEJBJNDIModel_1的执行流程Mode2_2的执行流程Struts框架的版本Struts充当表现层的作用。
Struts框架的核心组件ActionServlet总控制器。
核心组件,用于将具体的请求分配到各自处理的Action组件中。
Action具体的业务处理过程组件ActionFrom(FormBean)获取表单参数,并将参数封装到Bean中。
ActionForward用来Action的请求转发ActionMapping帮助控制器[ActionServlet]将请求映射到操作类[Action]Struts-config.xml用来配置Stuts组件的关联关系。
Struts框架的工作流程Struts-config.xml<form-bean name="loginForm" type="com.softfz.login.LoginForm" />name:用来表示actionform的名称type:用来表示actionform的类路径<actionattribute="loginForm" name="loginForm"path="/loginAction" scope="request"type="com.softfz.login.LoginActionAction" validate="true"input="/index.jsp" />attribute:表示ActionFrom的实例放到作用域中的名称.LoginForm aa = new LoginForm();aa.setUsername(request.getParameter("username"));aa.setPassword(request.getParameter("password"));request.setAttribute("attribute的值",aa);name:表示Action和ActionFrom关联的名称。
分页代码
public int queryPageCount(String hql, Object[] parameters, int pageSize){
//获取rowCount
Object obj= this.uniqueQuery(hql, parameters);
//也可以这样写: int rowCount=Integer.parseInt(obj.toString());
</td>
<td><a href="${pageContext.request.contextPath }/employee.do?flag=goListEmp&pageNow=${pageCount }">末页</a></td>
</tr>
</table>
return this.queryPageCount(hql, null, pageSize);
}
三、在Action中处理数据,保存在request中,显示在.jsp页面
public ActionForward goListEmp(ActionMapping mapping, ActionForm form,
pageNow = Integer.parseInt(s_pageNow);
}
//将hql语句不放在控制层,另写一个函数封装
request.setAttribute("emplist", employeeService.showEmployeeList(3, pageNow));
<c:forEach items="${emplist }" var="emp">
彻底解决Struts 数据库查询结果 分页显示
}
public void setPrice(String price){
this.price=price;
boolean hasPreviousPage=false; //是否有前一页
ArrayList arrayList;
Iterator it;
public PageBean(){}
}
public static ArrayList getAllBook(Connection connection){
String sql="select * from book";
* @作者 李敏强
* Struts分页显示数据Bean,对应数据库中Book表
*/
public class Book {
private String bookname; //书名
private String author; //作者
ArrayList arrayList = new ArrayList();
try{
Statement statement =
connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
彻底解决Struts 数据库查询结果 分页显示
一 开发环境
Elicpse+Struts Studio+SqlServer2000+Tomcat。
二 开发思路
既然讲的是Struts,那自然离不了MVC,分页显示也是如此。
}
GridView自带分页 1总页数 首页 下一页 上一页 尾页 X 页 go 实现方法 .
<PagerTemplate>
<table>
<tr>
<td style="text-align: right"> 第<asp:Label ID="lblPageIndex" runat="server" Text="<%#((GridView)Container.Parent.Parent).PageIndex + 1 %>"></asp:Label>页
<asp:LinkButton ID="btnLast" runat="server" CausesValidation="False" CommandArgument="Last"
CommandName="Page" Text="尾页"></asp:LinkButton>e>
</PagerTemplate>
后台代码添加如下代码
protected void PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView gvw = (GridView)sender;
if (Pa <= 0)
{
gvw.PageIndex = 0;
}
else
{
gvw.PageIndex = Pa - 1;
if (e.NewPageIndex < 0)
Struts分页显示
Book[] books=pd.getPreviousPage();
request.setAttribute("resule",books);
request.setAttribute("page",pd);
4)建立视图组件,这部分JSP来实现,为了不出现JAVA代码,使用Struts提供的标签库,主要负责从Request中取出刚刚放入的对象,通过反复调用Action以及action参数,而实现分页显示,是pagetest.jsp.
5)建立并配置struts-config.xml和web.xml文件.
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
…………………………………………………………………………
这个是控制器Action类
package page;
import org.apache.struts.action.*;
2)建立分页所需要的模型组件,也是用JavaBean,通过Book提供的ArrayList来构造,这里用的是PageBean.java.
3)建立控制器组件,这部分由Struts的Action来实现,主要负责实例化Book,并利用返回的ArrayList对象,构造PageBean,以及接收由视图传递来的action参数,从而在PageBean对象中调用不同的方法,该方法返回Book[]对象,最后将Book[]和PageBean放入到request中.本Action为PageListAction.java.
e.printStackTrace();
struts2+spring+hibernate分页显示完整代码
分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流。
1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法:publicinterface MemberDao {@SuppressWarnings("unchecked")/*** 分页查询* @param hql查询的条件* @param offset 开始记录* @param length 一次查询几条记录* @return*/public List queryForPage(final Stringhql,finalint offset,finalint length);/*** 查询所有记录数* @param hql查询的条件* @param offset 开始记录* @return总记录数*/publicint getAllRowCount(String hql);}2、DAO层实现类MemberDaoImpl对上面两个方法的实现如下:publicclass MemberDaoImpl extends HibernateDaoSupport implements Me mberDao {/*** 查询所有记录数* @return总记录数*/publicint getAllRowCount(String hql) {return getHibernateTemplate().find(hql).size();}/*** 分页查询* @param hql查询的条件* @param offset 开始记录* @param length 一次查询几条记录* @return*/@SuppressWarnings("unchecked")public List queryForPage(final String hql, finalint offset, finalint length) {List list =getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session)throws HibernateException, SQLException {Query query = session.createQuery(hql);query.setFirstResult(offset);query.setMaxResults(length);List list = query.list();return list;}});return list;}}细心的读者会发现,这个类继承了HibernateDaoSupport类,HibernateDaoSupport是Spring 提供的对Hibernate支持的类,getHibernateTemplate().executeFind(new HibernateCallback(){....})方法中的参数,我们使用了接口回调,在其参数内,我们能像原生的Hibernate一样调用query.setFirstResult(offset)和query.setMaxResults(length)来实现分页查询功能。
Struts分页的一个实现
Struts分页的一个实现在Web应用程序里,分页总让我们开发人员感到很头疼,倒不是因为技术上有多么困难,只是本来和业务没有太多关系的这么一个问题,你却得花不少功夫来处理。
要是稍不留神,时不时出点问题就更郁闷了。
我现在做的一个项目也到了该处理分页的时候了,感觉以前处理得都不好,所以这次有所改变,基本目标是在现有(未分页)的代码基础上,尽量少做修改,并且同样的代码可以应用于不同模块的分页。
以下就是我用的方法:首先,考虑分页绝大多数发生在列表时,组合查询时也需要用到。
在我的项目里,列表的Action一般名字为ListXXXActioin,例如客户列表是ListClientsAction等等。
在未分页前,ListXXXAction里会把所有的对象取出,通过request.setAttribute()放在request里,然后将请求转向到列表的jsp(例如listClients.jsp)显示出来(你可能会说不要在Action里放业务逻辑,但现在这不是我们考虑的重点)。
而分页后,我们只取用户请求页对应的那些对象。
为了最大限度的达到代码重用,我做了以下工作:1、新建一个Pager类,该类有beginPage、endPage、currentPage、pageSize和total等int类型的属性,分别代表开始页、结束页、当前页、每页记录数和总记录数,它主要是让jsp页面显示页导航使用的。
请注意currentPage属性是从0开始的。
2、新建一个AbstractListActioin类,并让所有ListXXXAction都继承它。
在这个类里覆盖execute()方法,可以在这里判断权限等等,并在判断权限通过后执行一个abstract的act()方法,这个act()由ListXXXAction来实现。
3、在AbstractListAction里增加getPage()方法,用来从request得到用户请求的页码(若未请求则认为是第0页):protected int getPage(HttpServletRequest request) {String p = request.getParameter("p");if (p == null)return 0;elsetry {return Integer.parseInt(p);} catch (NumberFormatException e) {return 0;}}4、在AbstractListAction里增加makePager()方法,用来向request里增加一个Pager类的实例,供jsp页面显示页导航:protected Pager makePager(HttpServletRequest request, int total) {Pager pager=new Pager();pager.setTotal(total);pager.setPageSize(Config.getInstance().getPageSize());pager.setBeginPage(0);pager.setEndPage(((pager.getTotal()) - 1) / pager.getPageSize() + 1);pager.setCurrentPage(getPage(request));return pager;}注意在我的项目里,每页记录数是写在配置文件里的,如果你没有配置文件,上面第4行setPageSize()的参数直接填数字即可,例如pager.setPageSize(10);5、这样,所有的ListXXXAction都可以使用getPage()得到请求的页码,并且能够方便的通过makePager()构造需要放在request里的pager对象了。
JSP分页详细代码(包括下拉条及跳转)
<%@ page contentType="text/html;
charset=GBK" %>
<%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>
<%
//变量声明
Connection sqlCon; //数据库连接对象
}
//装载JDBC驱动程序
try{
Class.forName("com.mysql.jdbc.Driver");
} catch(ClassNotFoundException e){
out.print("加载驱动错误");
}
//设置数据库连接字符串
strCon = "jdbc:mysql://localhost/mydata";;
int intPageCount; //总页数
Байду номын сангаас
int intPage; //待显示页码
String strPage;
int i;
//设置一页显示的记录数
intPageSize = 5;
//取得待显示页码
strPage = request.getParameter("page");
Statement sqlStmt; //SQL语句对象
ResultSet sqlRst; //结果集对象
String strCon; //数据库连接字符串
JSP中如何分页文档整理
// 获取总记录数 rowCount
UserDao userDao = new UserDao();
String count=userDao.getList("user", "count(id)", null, null, null).get(0).get("count(id)");
List<Map<String, String>> list = userDao.getList("user", "id,username,password,userage,url", null,start,pagesize);
if(list.size()>0){
return "ShowUserSuccess";
}
service中的方法如下:
// 分页查询
public List<Map<String, String>> query( int star, int pagsize){
//获取用户name 通过name查询信息
start = (pageNow-1)*pageSize;
List<Map<String, String>> list= userService.query(start, pageSize);
ServletActionContext.getRequest().setAttribute("list", list);
web项目中的分页:
其中包含 一个jsp界面;两个类,分别是action类和service类;包含一个struts配置
分页1
}
public void refresh(int _currentPage) {
currentPage = _currentPage;
if (currentPage > totalPages) {
last();
二、Hibernate查询
由于在Hibernate中直接提供了对数据库定点定量的查询方法,所以我采用的是第2种方法。
如:
从第1万条开始取出100条记录
Query q = session.createQuery("from Cat as c");
q.setFirstResult(10000);
}
public Pager(int _totalRows) {
totalRows = _totalRows;
totalPages=totalRows/pageSize;
int mod=totalRows%pageSize;
if(mod>0){
totalPages++;
}
currentPage = 1;
totalRows = ((Integer) session.iterate(query).next()).
intValue();
mit();
} catch (HibernateException he) {
if (tx != null) {
tx.rollback();
}
throw he;
Query q = session.createQuery("from VehicleProperty vp");
js 数组的分页序号算法
js 数组的分页序号算法摘要:1.引言2.分页序号算法介绍3.JavaScript 数组分页序号算法实现4.总结正文:在开发过程中,我们常常需要对数据进行分页处理,以便于更好地展示和访问。
分页序号算法就是用于计算分页后的序号,使其符合预期需求。
本文将介绍一种基于JavaScript 的数组分页序号算法。
## 分页序号算法介绍分页序号算法通常包括以下几个步骤:1.确定分页大小:根据实际需求,设置每页显示的元素数量。
2.计算页数:将数组元素总数除以分页大小,向上取整得到总页数。
3.计算起始和结束索引:根据当前页数和分页大小,计算起始和结束索引。
4.计算序号:根据起始索引和当前页数,计算每个元素对应的序号。
## JavaScript 数组分页序号算法实现以下是使用JavaScript 实现的分页序号算法:```javascriptfunction getPageNumber(arr, pageSize) {// 计算总元素数const totalSize = arr.length;// 计算总页数const totalPage = Math.ceil(totalSize / pageSize);// 获取当前页数const currentPage = Math.floor(arr.currentIndex / pageSize);// 计算起始索引const startIndex = (currentPage - 1) * pageSize;// 计算结束索引const endIndex = Math.min(startIndex + pageSize, totalSize);// 计算序号const index = (arr.currentIndex - startIndex) + 1;return {totalPage,currentPage,startIndex,endIndex,index};}// 使用示例const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];const pageSize = 3;const result = getPageNumber(arr, pageSize);console.log(result);```在这个示例中,我们定义了一个名为`getPageNumber`的函数,接收数组`arr`和分页大小`pageSize`作为参数。
Struts分页方法
2006年04月30日一个高效简洁的Struts分页方法一、开发环境我的开发环境是:JBuilder x + Weblogic 8.1 + Oracle 9i + Windows 2003 ,如果朋友们的开发环境不一样亦无妨。
二、开发思路既然讲的是Struts,那自然离不了MVC,分页显示也是如此。
1、建立数据库和对应的表,本例的表是TCertificate。
2、建立适当的模型组件,对应你要查询数据库中的表。
这部分由DAO数据访问层来实现,如果有的朋友对DAO不熟悉可以查询一下相关资料。
本例由CertificateDAO.java来实现。
3 、建立分页所需要的模型组件,由javaBean来充当,并与CertificateDAO实现分离。
网上介绍的很多方法,都存在着数据与分页组件藕合的现象,这也是本方法与其它分页方法的主要不同之处。
4、建立控制器组件,这部分由Struts 中的Action来实现。
主要负责将实例化CertificateDAO,只取要显示的数据记录,存入ArrayList对象然后返回,并放到request中。
而分页部分则根据分页条件,单独进行构造,避免了与DAO混在一起的情况发生。
网上其它介绍的一些分页方法中,基本上都是一次性读出所有查询的数据,然后再由分页相关组件进行构造。
这样,如果数据量大的话,很容易形成瓶颈。
在本例中由于不是一次性地读出查询的所有数据,而只是读出一个页面要显示的数据记录,这就节省了很多不必要的数据传输,提高了效率。
本例中为CertificateAction.java。
5、建立视图组件,这部分由jsp来充当,为了不出现java 代码,我们使用Struts提供的标签库,主要负责从request中取出刚刚放入的对象,通过反复调用CertificateAction以及action参数,而实现分页显示。
本例中为listcertificate.jsp。
6、建立并配置struts-config.xml。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<%@ taglib uri="/tags-tiles" prefix="tiles" %>html<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ include file="taglib.jsp"%><script type="text/javascript">function commonAll(uurl) {//点击分页页号以及上一页下一页时候自动提交表单document.forms[0].action=uurl;document.forms[0].submit();}function ForwardPage(url){var cur=document.getElementById("curpage").value;var max=document.getElementById("max").value;if(cur==0){document.getElementById("curpage").value=1;cur=1;}if(max==0){max=1;}if(isNaN(cur)||cur<1){document.getElementById("curpage").value=1;}if(parseInt(cur)>parseInt(max)){document.getElementById("curpage").value=max;}commonAll(url);}function ckPage(o){if(isNaN(o.value) || o.value<0){o.value = 1;}}</script><tiles:importAttribute /><bean:define id="fname" name="formName" scope="page" /><bean:define id="aname" name="actionName" scope="page" /><bean:define id="pagename" name="pageName" scope="page" /><bean:define id="maxpage" name="<%=(String)fname%>" property="maxpage" /> <bean:define id="curpage" name="<%=(String)fname%>" property="curpage" />int cur = ((Integer)curpage).intValue(); //当前页int max = ((Integer)maxpage).intValue(); //最大页数%>共<bean:write name="<%=(String)fname%>" property="listsize" /> 条<a>页次:<%=cur%>/<%=max%></a><%if(cur!=1){%><a href="#" onClick="commonAll('<%=(String)aname%>.do?operate=<%=pagename%>&curpage=<%=Inte ger.toString(cur-1)%>')" >上一页<%}%></a><%int base = cur/10;int count=0;if((base+1)*10>=max){count=max;}else{count=(base+1)*10;}for(int j=base != 0 ? base*10-1 : base*10;j<count;j++){%><a href="#" onClick="commonAll('<%=(String)aname%>.do?operate=<%=pagename%>&curpage=<%=j+1 %>')" <%if(cur==j+1){%>class="pageOn"<%}%>><%=j+1%></a><% }if(max!=0&&max>cur){%><a href="#" onClick="commonAll('<%=(String)aname%>.do?operate=<%=pagename%>&curpage=<%=Inte ger.toString(cur+1)%>')" >下一页</a><%}%>2 xml<tiles:insert page="page.jsp"><tiles:put name="formName" value="firstCheckUpForm" /><tiles:put name="actionName" value="vCardApplyAuditing" /><tiles:put name="pageName" value="vCardApplyAuditingQuery" /></tiles:insert>dao.java中定义分页查询的方法//hql 查询public List findByHql(String hql) {try {List list = getHibernateTemplate().find(hql);if (list.isEmpty()) {return null;} else {return list;}} catch (Exception re) {logger.log(Level.SEVERE, "查询数据库错误" + re.getMessage());return null;}}//sql 查询public List findBySql(final String sql) {return this.getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) {Query query = session.createSQLQuery(sql);return query.list();}});}/*** 利用Hibenate回调,分页程序* @param SQL语句(可以使带参数的,也可以是不带参数的(带参数指的是“?”))* @param obj SQL的参数对应SQL中的“?”* @param currpage 当前页码* @param rowsNum 查询全部结果条数* @param maxResult 每一页的结果数量*///sql 分页查询public List findPageSql(final Object[] obj, final String hql,final int currpage, final int rowsNum, final int maxResult) {return this.getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session s) throws HibernateException,SQLException {Query query = s.createSQLQuery(hql);if (obj != null) {for (int i = 0; i < obj.length; i++) {Class theClass = obj[i].getClass();if (theClass.getName().equals("ng.String"))query.setString(i, (String) obj[i]);if (theClass.getName().equals("ng.Long"))query.setLong(i, (Long) obj[i]);if (theClass.getName().equals("java.sql.Date"))query.setDate(i, (Date) obj[i]);if (theClass.getName().equals("java.sql.Timestamp"))query.setTimestamp(i, (Timestamp) obj[i]);if (theClass.getName().equals("ng.Iterate"))query.setInteger(i, (Integer) obj[i]);}} //根据此条件查询记录条敄1�7if (rowsNum != -1) {query.setFirstResult((currpage - 1) * maxResult);query.setMaxResults(maxResult);}List list = query.list();return list;}});}/*** 利用Hibenate回调,分页程序* @param HQL语句(可以使带参数的,也可以是不带参数的(带参数指的是“?”))* @param obj hql的参数对应hql中的“?”* @param currpage 当前页码* @param rowsNum 查询全部结果条数* @param maxResult 每一页的结果数量*///hql 分页查询public List findPage(final Object[] obj, final String hql,final int currpage, final int rowsNum, final int maxResult) {return this.getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session s) throws HibernateException,SQLException {Query query = s.createQuery(hql);if (obj != null) {for (int i = 0; i < obj.length; i++) {Class theClass = obj[i].getClass();if (theClass.getName().equals("ng.String"))query.setString(i, (String) obj[i]);if (theClass.getName().equals("ng.Long"))query.setLong(i, (Long) obj[i]);if (theClass.getName().equals("java.sql.Date"))query.setDate(i, (Date) obj[i]);if (theClass.getName().equals("java.sql.Timestamp"))query.setTimestamp(i, (Timestamp) obj[i]);if (theClass.getName().equals("ng.Iterate"))query.setInteger(i, (Integer) obj[i]);}} //根据此条件查询记录条数if (rowsNum != -1) {query.setFirstResult((currpage - 1) * maxResult);query.setMaxResults(maxResult);}List list = query.list();return list;}});}/*** 利用Hibenate回调,分页程序* @param sql语句(是不带参数的(不带参数指的是“?”))* @param currpage 当前页码* @param rowsNum 查询全部结果条数* @param maxResult 每一页的结果数量*///不带参数的sql查询(直接传入生成的sql语句)public List findPageSql( final String sql,final int currpage, final int rowsNum, final int maxResult) {return this.getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session s) throws HibernateException,SQLException {Query query = s.createSQLQuery(sql);if (rowsNum != -1) {query.setFirstResult((currpage - 1) * maxResult);query.setMaxResults(maxResult);}List list = query.list();return list;}});}定义一个公共的PubForm用于分页,项目中用到的ActionForm可以继承此PubForm在PubForm定义3个变量private int maxpage = 1;最大页数private int curpage = 1;当前页private int listsize = 0;所有记录的数量自动生成setter getter方法service中调用分页public List queryApply(FirstCheckUpForm form, int pageItems){//pageItems : 每页条数String sql = "select " +" ra.ID," + // 0 申请id" ra.YCSID," + // 1 验船师id" ra.STATUS," + // 2 申请状态" ra.TYPE," + //3 申请种类" ra.CHECKUPID," + //4 审核id" ra.CREATETIME," + // 5 申请时间" y.IDNO," + // 6 验船师身份证" y.YCSNAME," + // 7 验船师姓名" y.SEX," + // 8 验船师性别" y.CERTNO," + // 9 证书号" y.LEVELS " + // 10 证书等级" from REMAKEAPPLY ra left join YCSINFO y on y.YCSID = ra.YCSID" +" order by ra.CREATETIME desc";List l = dao.findBySql(sql);if(l != null){int rowsNum = l.size();int temp = rowsNum % pageItems; //取模int pageNum = 0;if (temp > 0) {//如果有余数pageNum = rowsNum / pageItems + 1;} else if (temp == 0)pageNum = rowsNum / pageItems;form.setListsize(rowsNum);//设置总记录条数form.setMaxpage(pageNum);// 设置最大页数//return this.findObjs(form.getCurpage(), rowsNum, pageItems, map);return dao.findPageSql(sql, form.getCurpage(), rowsNum, pageItems);}else{return null;}};Action中写一个shownews方法:public String shownews(){HttpServletRequest request = ServletActionContext.getRequest();DBConnect Connect= new DBConnect();news = new News();Connection conn=null;String sql1="select * from news where news_id ="+news_id;Statement smt1;try {conn=Connect.connect();smt1 = conn.createStatement();ResultSet rs1=smt1.executeQuery(sql1);while(rs1.next()){news.setNews_id(rs1.getInt("news_id"));news.setTitle(rs1.getString("title"));news.setContent(rs1.getString("content"));news.setLasttime(rs1.getDate("lasttime"));news.setBoardid(rs1.getInt("boardid"));request.setAttribute("content", rs1.getString("content"));}} catch (SQLException e) {return "failure";}return "success";}struts.xml中配置:<action name="shownews" class="action.ShowNewsAction" method="shownews"><result name="success">shownews.jsp</result><result name="failure">shownews.jsp</result></action>前台页面通过<s:property value="news.title" /><%=request.getAttribute("content") %>获得新闻属性,后台数据记得封装。