- 浏览: 2290236 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (357)
- J2EE (49)
- JavaScript (40)
- Spring (19)
- Struts (5)
- CSS (8)
- Hibernate (16)
- Java (67)
- DWR (4)
- JSON (3)
- XFIRE (1)
- Tomcat (1)
- Ant (2)
- 设计模式 (2)
- 经典收藏 (2)
- JSP (10)
- Linux (0)
- WebLogic (11)
- myeclipse (13)
- Buffalo (4)
- 文件上传相关 (1)
- oracle (33)
- html (6)
- JSTL (3)
- SVN (2)
- GIT (1)
- 孙卫琴(Java网络编程精解) (1)
- DOM4J (2)
- Swing (1)
- AJAX (1)
- Eclipse (5)
- 日志组件 (3)
- PowerDesigner (1)
- Jquery (22)
- IT技术开发相关网址 (1)
- Nutz (1)
- 其它 (1)
- Velocity (3)
- WebService (1)
- MySql (2)
- Android (1)
- Maven (2)
- Quartz (11)
- Lucene (1)
- springsource (1)
- Junit (1)
- Activiti (0)
最新评论
-
yzlseu:
拼凑,没有营养
Activiti进阶—分配组任务 -
zhangsenhao:
非常赞!代码很清楚
SpringMVC3.0+MyIbatis3.0(分页示例) -
xiamw2000:
分页写得不对,应该是 : order by ${orderNa ...
SpringMVC3.0+MyIbatis3.0(分页示例) -
sheertewtw:
...
SpringMVC:上传与下载 -
kingtoon:
...
XSS之xssprotect
参考资料
1 ssh分页(多个例子)
http://useryouyou.iteye.com/blog/593954
2 ssh2分页例子
http://459104018-qq-com.iteye.com/blog/467196
3 ssh2分页
http://blog.csdn.net/shmily2038/archive/2009/12/28/5090044.aspx
注意事项:
此示例是在:Struts2.2+Spring3.1+Hibernate3.6整合(登录示例及CRUD操作)基础上加的分页功能:
http://liuzidong.iteye.com/blog/935493
实现功能:分页,排序,设置每页显示多少条,转到第多少页
调用说明:
1 导入只需要:com.liuzd.page包下的类或者将page.jar加入WEB-INF/lib下也行^_^
2 Struts2前台类实现: BaseAction父类
3 在子类方法中调用父类提供的方法:
Page page = executePage(querySql,totalCount," id desc ");
需要传递三个参数就行了: querySql(查询sql语句), totalCount(总行数),
" id desc "(排序的列名与排序方式)
4 返回分页数据
List<User> users = this.userService.getUserListByPage(page);
5 在spring配置文件中请保持有: jdbcTemplate与hibernateTemplate这二个Bean的名字,否则dbUtil类不能使用
6 具体可参见:四的说明
一 运行环境:XP+Myeclipse6.6+WebLogic92+Oracle10g
二 工程相关图片:
1 DEMO图片
2 工程代码图片
3 page.jar图片
三 此示例是在:
Struts2.2+Spring3.1+Hibernate3.6整合(登录示例及CRUD操作)基础上加的分页功能:
http://liuzidong.iteye.com/blog/935493,jar包在此页面中下载
四 关注类及页面:
1 BaseAction类(可能你在项目有其它的父类要使用,只要关注这个类中的: protected Page executePage(String querySql,Long totalCount,String columnNameDescOrAsc)方法就行了,方法中的参数不用修改,它来自于page.jsp,你可拷贝这个方法到你的父类中就实现了分页功能,分页类详见注释)
2 UserAction子类(只关注:方法:userList()中的调用方式)
3 UserDAOImpl类(关注方法:public List<User> getUserListByPage(final Page page) )
4 userList.jsp页面
在排序处:
在下面加上:
四 要关注的类与页面
1 BaseAction.java
2 UserAction.java
3 UserDAOImpl.java
5 JSP引用
五 你不需要关注的分页类与JSP页面,可在附件下载jar与源码
1 Page.java
2 PageState.java
3 PageUtil.java
4 page.jsp
1 ssh分页(多个例子)
http://useryouyou.iteye.com/blog/593954
2 ssh2分页例子
http://459104018-qq-com.iteye.com/blog/467196
3 ssh2分页
http://blog.csdn.net/shmily2038/archive/2009/12/28/5090044.aspx
注意事项:
此示例是在:Struts2.2+Spring3.1+Hibernate3.6整合(登录示例及CRUD操作)基础上加的分页功能:
http://liuzidong.iteye.com/blog/935493
实现功能:分页,排序,设置每页显示多少条,转到第多少页
调用说明:
1 导入只需要:com.liuzd.page包下的类或者将page.jar加入WEB-INF/lib下也行^_^
2 Struts2前台类实现: BaseAction父类
3 在子类方法中调用父类提供的方法:
Page page = executePage(querySql,totalCount," id desc ");
需要传递三个参数就行了: querySql(查询sql语句), totalCount(总行数),
" id desc "(排序的列名与排序方式)
4 返回分页数据
List<User> users = this.userService.getUserListByPage(page);
5 在spring配置文件中请保持有: jdbcTemplate与hibernateTemplate这二个Bean的名字,否则dbUtil类不能使用
6 具体可参见:四的说明
一 运行环境:XP+Myeclipse6.6+WebLogic92+Oracle10g
二 工程相关图片:
1 DEMO图片
2 工程代码图片
3 page.jar图片
三 此示例是在:
Struts2.2+Spring3.1+Hibernate3.6整合(登录示例及CRUD操作)基础上加的分页功能:
http://liuzidong.iteye.com/blog/935493,jar包在此页面中下载
四 关注类及页面:
1 BaseAction类(可能你在项目有其它的父类要使用,只要关注这个类中的: protected Page executePage(String querySql,Long totalCount,String columnNameDescOrAsc)方法就行了,方法中的参数不用修改,它来自于page.jsp,你可拷贝这个方法到你的父类中就实现了分页功能,分页类详见注释)
2 UserAction子类(只关注:方法:userList()中的调用方式)
3 UserDAOImpl类(关注方法:public List<User> getUserListByPage(final Page page) )
4 userList.jsp页面
<%@ taglib uri="/WEB-INF/c.tld" prefix="c"%> <c:set var="page" value="${sessionScope.page}" />
在排序处:
<font color='red'>${page.sortName eq "username" ? page.sortInfo :page.defaultInfo}</font>
在下面加上:
<jsp:include page="/page/page.jsp"> <jsp:param name="url" value="userAction!userList.action" /> <!-- 演示传值:要用%26 --> <jsp:param name="urlParams" value="%26age=2" /> </jsp:include>
四 要关注的类与页面
1 BaseAction.java
package com.liuzd.common; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.SessionAware; import com.liuzd.page.Page; import com.liuzd.page.PageUtil; import com.liuzd.page.PageState; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; /** * 基本Struts2的分页父类 * @author liuzd * @version 1.0 2011-05-12 * @since JDK1.5 * */ public class BaseAction extends ActionSupport implements SessionAware{ private static final long serialVersionUID = 1L; public void setSession(Map<String, Object> sessionMap) { } protected Map<String,Object> getMapSession(){ return (Map<String,Object>)ActionContext.getContext().getSession(); } protected Object getMapSessionGet(String key){ return getMapSession().get(key); } protected void setMapSessionPut(String key,Object value){ getMapSession().put(key, value); } /*** * 获取请求对象 * */ protected HttpServletRequest getRequest(){ return ServletActionContext.getRequest (); } /*** * 获取会话对象 * */ protected javax.servlet.http.HttpSession getSession(){ return getRequest().getSession(); } /*** * 设置请求参数 * */ protected void setRequestAttribute(String attribute,Object attrValue){ getRequest().setAttribute(attribute, attrValue); } /*** * 获取请求参数 * */ protected Object getRequestAttribute(String attribute){ return getRequest().getAttribute(attribute); } /*** * 设置Session参数与值 * */ protected void setSessionAttribute(String attribute,Object attrValue){ getSession().setAttribute(attribute, attrValue); } /*** * 获取Session参数与值 * */ protected Object getSessionAttribute(String attribute){ return getSession().getAttribute(attribute); } /** * oracel的三层分页语句 * 子类在展现数据前,进行分页计算! * @param querySql 查询的SQL语句,未进行分页 * @param totalCount 根据查询SQL获取的总条数 * @param columnNameDescOrAsc 列名+排序方式 : ID DESC or ASC */ protected Page executePage(String querySql,Long totalCount,String columnNameDescOrAsc){ String oracleSql = PageUtil.createQuerySql(querySql,columnNameDescOrAsc); if(null == totalCount){ totalCount = 0L; } /**页面状态,这个状态是分页自带的,与业务无关*/ String pageAction = getRequest().getParameter("pageAction"); String value = null; /**获取下标判断分页状态*/ int index = PageState.getOrdinal(pageAction); if(0 == index){ /**每页显示多少条*/ value = getRequest().getParameter("everyPage"); } Page page = null; /** * index < 1 只有二种状态 * 1 当首次调用时,分页状态类中没有值为 NULL 返回 -1 * 2 当页面设置每页显示多少条: index=0,当每页显示多少条时,分页类要重新计算 * */ if(index < 1){ page = PageUtil.inintPage(oracleSql,totalCount,index,value,getPage()); }else{ /** * 当页面排序时 * */ if(5 == index){ value = getRequest().getParameter("sortName"); /** * 到指定多少页 * */ }else if(6 == index){ value = getRequest().getParameter("currentPage"); } page = PageUtil.execPage(index,value,getPage()); } setSession(page); return page; } private Page getPage() { Page page = (Page)getSession().getAttribute(PageUtil.SESSION_PAGE_KEY); if(page == null){ page = new Page(); } return page; } private void setSession(Page page) { getSession().setAttribute(PageUtil.SESSION_PAGE_KEY,page); } }
2 UserAction.java
package com.liuzd.s2sh.web; import java.util.List; import javax.annotation.Resource; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import com.liuzd.common.BaseAction; import com.liuzd.common.DbUtils; import com.liuzd.page.Page; import com.liuzd.s2sh.entity.User; import com.liuzd.s2sh.service.UserService; @Component("u") @Scope("prototype") public class UserAction extends BaseAction { private static final long serialVersionUID = 1L; private String message = null; private User user = null; private String action = null; public String getAction() { return action; } public void setAction(String action) { this.action = action; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String execute() throws Exception { System.out.println("user: " + user); User dbUser = this.userService.checkUserExits(user); if (null != dbUser) { message = "用户: " + user.getUsername() + "登录成功"; System.out.println(message); getMapSession().put("sessionUser", dbUser); return userList(); //return "success"; } message = "用户: " + user.getUsername() + "登录失败"; return "fail"; } public String loadUser() { action = "update"; message = "编辑用户信息"; User loadUser = new User(); loadUser.setId(user.getId()); user = this.userService.getUserByUid(loadUser); this.getRequest().setAttribute("myname", "天涯海角"); this.getMapSession().put("mysex", "男"); System.out.println("loaduser: " + user); return "user"; } public String addUser() { action = "add"; return "user"; } public String saveUser() { this.userService.addUser(user); return "user"; } public String delUser() { action = "del"; this.userService.delUser(user); return userList(); } public String editUser() { System.out.println("action: " + action + ",编辑用户: " + user); if ("update".equals(action)) { this.userService.editUser(user); } else if ("add".equals(action)) { saveUser(); } return userList(); } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } private UserService userService = null; private DbUtils dbUtil = null; public String userList() { //因为Hibernate分页的性能问题,使用原生sql来解决 String querySql = "select * from users where 1=1 "; //用jdbc查询总条数 Long totalCount = getDbUtil().getCountByQuerySql(querySql); //调用父类方法进行分页参数相关计算 Page page = executePage(querySql,totalCount," id desc "); //返回分页数据 List<User> users = this.userService.getUserListByPage(page); getRequest().setAttribute("userList",users); return "userList"; } public UserService getUserService() { return userService; } @Resource public void setUserService(UserService userService) { this.userService = userService; } public DbUtils getDbUtil() { return dbUtil; } @Resource public void setDbUtil(DbUtils dbUtil) { this.dbUtil = dbUtil; } }
3 UserDAOImpl.java
package com.liuzd.s2sh.dao.impl; import java.sql.SQLException; import java.util.List; import javax.annotation.Resource; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.stereotype.Component; import com.liuzd.page.Page; import com.liuzd.s2sh.dao.UserDAO; import com.liuzd.s2sh.entity.User; @Component("userDao") public class UserDAOImpl implements UserDAO { private HibernateTemplate hibernateTemplate; public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } @Resource public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } @SuppressWarnings("unchecked") public User getUserByUserIdAndUserNameExits(User user) { List<User> users = hibernateTemplate .find("from User u where u.username = '" + user.getUsername() + "' and u.password='" + user.getPassword() + "'"); if (users != null && users.size() > 0) { return users.get(0); } return null; } public void saveUser(User user) { this.hibernateTemplate.save(user); } public void delUser(User user) { User delUser = getUser(user); this.hibernateTemplate.delete(delUser); } @SuppressWarnings("unchecked") public List<User> finUserAll() { return this.hibernateTemplate.find("from User"); } public User getUser(User user) { return this.hibernateTemplate.get(User.class, user.getId()); } public void updateUser(User user) { this.hibernateTemplate.update(user); } @SuppressWarnings("unchecked") public Long getUserCount() { List list = this.getHibernateTemplate().find("select count(*) from User"); return ((Long) list.iterator().next()); } public Long getUserCount(String querySql) { return (Long) getHibernateTemplate().find(querySql).iterator().next(); } @SuppressWarnings("unchecked") public List<User> getUserListByPage(final Page page) { return this.getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { /*Query query = session.createQuery("from User"); //性能问题所在 query.setFirstResult(page.getBeginIndex()); query.setMaxResults(page.getEveryPage()); return query.list();*/ /* .add(Restrictions.gt("id", 2)) //greater than = id > 2 .add(Restrictions.lt("id", 8)) //little than = id < 8 .add(Restrictions.like("title", "t_")) .createCriteria("category") .add(Restrictions.between("id", 3, 5)) //category.id >= 3 and category.id <=5 .add(Expression.ge("age", new Integer(20)); .addOrder( Order.asc("name") ) .addOrder( Order.desc("age") ) .setMaxResults(50) .list(); .add( Property.forName("name").like("F%") ) .addOrder( Property.forName("name").asc() ) .addOrder( Property.forName("age").desc() ) .setMaxResults(50) .list(); * */ /*Criteria c = session.createCriteria(User.class); String sortName = page.getSortName(); if(StringUtils.isNotEmpty(sortName)){ if("asc".equals(page.getSortState())){ c.addOrder(org.hibernate.criterion.Order.asc(sortName)); }else{ c.addOrder(org.hibernate.criterion.Order.desc(sortName)); } } c.setFirstResult(page.getBeginIndex()); c.setMaxResults(page.getEveryPage()); return c.list();*/ Query query = session.createSQLQuery(page.getQuerySql()).addEntity(User.class); return query.list(); } }); } }
5 JSP引用
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <%@ taglib uri="/WEB-INF/c.tld" prefix="c"%> <c:set var="page" value="${sessionScope.page}" /> <html> <head> <title>用户集合</title> </head> <body> <table width="60%" border="1" cellpadding="0" align="center"> <thead> <tr> <th style="cursor: hand;" title="按姓名进行排序" onclick="sortPage('username')" valign="top"> 姓名<font color='red'>${page.sortName eq "username" ? page.sortInfo : page.defaultInfo}</font> </th> <th style="cursor: hand;" title="按年龄进行排序" onclick="sortPage('age')" valign="top"> 年龄<font color='red'>${page.sortName eq "age" ? page.sortInfo : page.defaultInfo}</font> </th> <th style="cursor: hand;" title="按性别进行排序" onclick="sortPage('sex')" valign="top"> 性别<font color='red'>${page.sortName eq "sex" ? page.sortInfo : page.defaultInfo}</font> </th> <th style="cursor: hand;" title="按地址进行排序" onclick="sortPage('address')" valign="top"> 地址<font color='red'>${page.sortName eq "address" ? page.sortInfo : page.defaultInfo}</font> </th> <th style="cursor: hand;" > 操作 </th> </tr> </thead> <tbody> <!-- <s:iterator value="#request.userList" status="status" > <tr align="center"> <td><s:property value="username"/></td> <td><s:property value="age"/></td> <td><s:property value="sex"/></td> <td><s:property value="address"/></td> <td> <s:a href="userAction!addUser.action">添加</s:a> | <s:a href="userAction!loadUser.action?user.id=%{id}">编辑</s:a> | <a href="<s:url action="userAction!delUser.action"><s:param name="user.id" value="id"/></s:url>">删除</a> </td> </tr> </s:iterator> --> <c:forEach items="${requestScope.userList}" var="user"> <tr align="center"> <td> ${user.username} </td> <td> ${user.age} </td> <td> ${user.sex eq 1 ? "男" : user.sex eq 2 ? "女" : "未知"} </td> <td> ${user.address} </td> <td> <a href="${pageContext.request.contextPath}/userAction!addUser.action">添加</a> | <a href="${pageContext.request.contextPath}/userAction!loadUser.action?user.id=${user.id}">编辑</a> | <a href="${pageContext.request.contextPath}/userAction!delUser.action?user.id=${user.id}">删除</a> </td> </tr> </c:forEach> <jsp:include page="page.jsp"> <jsp:param name="url" value="userAction!userList.action" /> <!-- 演示传值:要用%26 --> <jsp:param name="urlParams" value="%26age=2" /> </jsp:include> </tbody> </table> <br> <a href="${pageContext.request.contextPath}/Login.jsp">返回</a> <br> <s:debug></s:debug> </body> </html>
五 你不需要关注的分页类与JSP页面,可在附件下载jar与源码
1 Page.java
package com.liuzd.page; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.ToStringBuilder; /** * 分页类 * @author liuzd * @version 1.0 2011-05-12 * @since JDK1.5 * */ public class Page implements java.io.Serializable{ private static final long serialVersionUID = 1L; //前一页 private Boolean hasPrePage; //后一页 private Boolean hasNextPage; //每页显示多少条:默认10条 private Long everyPage = 10L; //总页数 private Long totalPage; //当前第多少页:默认第1页 private Long currentPage = 1L; //开始下标 private Long beginIndex; //结束下标 private Long endinIndex; //总共多少条 private Long totalCount; //查询结果集语句 private String querySql; //未进行分页的语句 private String initQuerySql; //排序列名 private String sortName; //排序状态 private String sortState; //排序信息 private String sortInfo; //是否排序 private Boolean sort; private String defaultInfo = " "; public String getDefaultInfo() { return defaultInfo; } public void setDefaultInfo(String defaultInfo) { this.defaultInfo = defaultInfo; } public String getSortInfo() { return sortInfo; } public void setSortInfo(String sortInfo) { this.sortInfo = sortInfo; } public String getSortName() { return sortName; } public void setSortName(String sortName) { setPageSortState(sortName); } public String getSortState() { return sortState; } public void setSortState(String sortState) { this.sortState = sortState; } public String getQuerySql() { return querySql; } public void setQuerySql(String querySql) { this.querySql = querySql; } public Page() { } /** * 常用,用于计算分页 * */ public Page(Long totalRecords){ this.totalCount = totalRecords; setTotalPage(getTotalPage(totalRecords)); } /** * 设置每页显示多少条时使用 * */ public Page(Long everyPage,Long totalRecords){ this.everyPage = everyPage; this.totalCount = totalRecords; setTotalPage(getTotalPage(totalRecords)); } /** * @param state 状态码 * @param value 到第多少页或者设置每页显示多少条或者为排序列名 */ public void pageState(int index,String value) { sort = false; switch (index) { case 0 :setEveryPage(Long.parseLong(value));break; case 1 :first();break; case 2: previous();break; case 3: next();break; case 4: last();break; case 5: sort = true;sort(value);break; case 6 ://到指定第多少页 setCurrentPage(Long.parseLong(value)); break; } } /** * 最前一页 */ private void first() { currentPage = 1L; } private void previous() { currentPage--; } private void next() { currentPage++; } private void last() { currentPage = totalPage; } private void sort(String sortName) { //设置排序状态 setPageSortState(sortName); } /** * 计算总页数 * */ private Long getTotalPage(Long totalRecords) { Long totalPage = 0L; if (totalRecords % everyPage == 0) totalPage = totalRecords / everyPage; else { totalPage = totalRecords / everyPage + 1; } return totalPage; } public Long getBeginIndex() { this.beginIndex = (currentPage - 1) * everyPage; return this.beginIndex; } public void setBeginIndex(Long beginIndex) { this.beginIndex = beginIndex; } public Long getCurrentPage() { this.currentPage = currentPage == 0 ? 1 : currentPage; return this.currentPage; } public void setCurrentPage(Long currentPage) { if(0 == currentPage){ currentPage = 1L; } this.currentPage = currentPage; } public Long getEveryPage() { this.everyPage = everyPage == 0 ? 10 : everyPage; return this.everyPage; } public void setEveryPage(Long everyPage) { this.everyPage = everyPage; } public Boolean getHasNextPage() { this.hasNextPage = (currentPage != totalPage) && (totalPage != 0); return this.hasNextPage; } public void setHasNextPage(Boolean hasNextPage) { this.hasNextPage = hasNextPage; } public Boolean getHasPrePage() { this.hasPrePage = currentPage != 1; return this.hasPrePage; } public void setHasPrePage(Boolean hasPrePage) { this.hasPrePage = hasPrePage; } public Long getTotalPage() { return this.totalPage; } public void setTotalPage(Long totalPage) { if(this.currentPage > totalPage){ this.currentPage = totalPage; } this.totalPage = totalPage; } public Long getTotalCount() { return this.totalCount; } public void setTotalCount(Long totalCount) { setTotalPage(getTotalPage(totalCount)); this.totalCount = totalCount; } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } /** * 设置排序状态 * */ private void setPageSortState(String newPageSortName){ //判断之前的排序字段是否为空 if(StringUtils.isEmpty(sortName)){ //默认排序为升序 this.sortState = PageUtil.ASC; this.sortInfo = PageUtil.PAGE_ASC; }else{ if(StringUtils.equalsIgnoreCase(newPageSortName, sortName)){ //判断sortState排序状态值 if(StringUtils.equalsIgnoreCase(sortState, PageUtil.ASC)){ this.sortState = PageUtil.DESC; this.sortInfo = PageUtil.PAGE_DESC; }else{ this.sortState = PageUtil.ASC; this.sortInfo = PageUtil.PAGE_ASC; } }else{ //默认 this.sortState = PageUtil.ASC; this.sortInfo = PageUtil.PAGE_ASC; } } sortName = newPageSortName.toLowerCase(); } public Boolean isSort() { return sort; } public void setSort(Boolean sort) { this.sort = sort; } public String getInitQuerySql() { return initQuerySql; } public void setInitQuerySql(String initQuerySql) { this.initQuerySql = initQuerySql; } public Long getEndinIndex() { this.endinIndex = (currentPage) * everyPage; return endinIndex; } public void setEndinIndex(Long endinIndex) { this.endinIndex = endinIndex; } }
2 PageState.java
package com.liuzd.page; import org.apache.commons.lang3.StringUtils; /** * 分页状态类 * @author liuzd * @version 1.0 2011-05-12 * @since JDK1.5 * */ public enum PageState { /** * 设置每页显示多少条 * */ SETPAGE, /** * 首页 * */ FIRST, /** * 向前一页 * */ PREVIOUS, /** * 向后一页 * */ NEXT, /** * 末页 * */ LAST, /** * 排序 * */ SORT, /** * 到第多少页 * */ GOPAGE; /** * @param value 索引名称 * @return 返回索引下标 */ public static int getOrdinal(String value) { int index = -1; if (StringUtils.isEmpty(value)) { return index; } String newValue = StringUtils.trim(value).toUpperCase(); try { index = valueOf(newValue).ordinal(); } catch (IllegalArgumentException e) {} return index; } }
3 PageUtil.java
package com.liuzd.page; /** * 分页工具类 * @author liuzd * @version 1.0 2011-05-12 * @since JDK1.5 * */ public class PageUtil { public static final String ASC = "asc"; public static final String DESC = "desc"; public static final String PAGE_DESC = "↓"; public static final String PAGE_ASC = "↑"; public static final String PAGE_NULL = " "; public static final String SESSION_PAGE_KEY = "page"; /** * @param querySql 查询SQL * @param beginIndex 开始下标 * @param endinIndex 结束下标 * @return */ public static String getPageQuerySql(String querySql,Long beginIndex, Long endinIndex) { if(querySql.indexOf("where rn>") != -1 && querySql.indexOf("and rn<=") != -1){ return querySql.toUpperCase(); } return new java.lang.StringBuffer().append(querySql).append(" where rn>").append(beginIndex).append(" and rn<=").append(endinIndex).toString().toUpperCase(); } /** * @param querySql 查询SQL * @param orderByName 排序列名 * @return */ @SuppressWarnings("unused") public static String createQuerySql(String querySql, String orderByName) { StringBuilder sql = new StringBuilder(); sql.append("select ttt.* from(select tt.*,rownum rn from("); sql.append(querySql); if (org.apache.commons.lang3.StringUtils.isNotEmpty(orderByName)) { sql.append(" order by ").append(orderByName); } sql.append(" )tt)ttt "); return sql.toString(); } /** * 取得排序名称+desc or asc * @param querySql 查询SQL * @return 返回查询语句 SELECT ... FROM TABLE ORDER BY ID DESC 中的 ID DESC */ public static String getSortDescOrAsc(String querySql) { /**取得ordery by之前的查询字符串*/ querySql = querySql.toUpperCase(); String temp = "ORDER BY"; int orderIndex = querySql.lastIndexOf(temp); String newsql = querySql.substring(orderIndex); String temp2 = ")"; int lastIndex = newsql.indexOf(temp2); String orderByName = newsql.substring(temp.length(),lastIndex).trim(); return orderByName; } /** * 初始化分页类 * @param initPageSql 未分页的查询SQL * @param totalCount 总行数 * @param index 分页状态 * @param value 只有在设置每页显示多少条时,值不会NULL,其它为NULL */ public static Page inintPage(String initPageSql,Long totalCount,Integer index,String value,Page sessionPage){ Page page = null; if(index < 0){ page = new Page(totalCount); }else{ /**每页显示多少条*/ Long everPage = null == value ? 10 : Long.parseLong(value); /**获取Session中的分页类,方便保存页面分页状态*/ page = sessionPage; page.setEveryPage(everPage); page.setTotalCount(totalCount); } page.setInitQuerySql(initPageSql); /**对查询SQL进行分页计算*/ String querySql = getPageQuerySql(initPageSql,page.getBeginIndex(), page.getEndinIndex()); /**真正传递到后台执行获取分页数据的sql*/ page.setQuerySql(querySql); /**保存到Session中*/ return page; } /** * 当页点击:首页,前一页,后一页,末页,排序,到第多少页时进行分页操作 * @param index 分页状态 * @param value 排序字段名或者到第多少页 */ public static Page execPage(int index,String value,Page sessionPage){ Page page = sessionPage; /**调用方法进行分页计算*/ page.pageState(index,value); /**未进行分页前的sql*/ String initPageSql = page.getInitQuerySql(); /**进行分页SQL组合*/ String querySql = getPageQuerySql(initPageSql,page.getBeginIndex(), page.getEndinIndex()); /**替换排序列名*/ if (page.isSort() == true) { String sortName = page.getSortName(); if (null != sortName) { /**获取排序状态:值(desc or asc)*/ String descAsc = page.getSortState(); /**组合新的排序字段与状态*/ String sortNameDescAsc = (" " + sortName + " " + descAsc).toUpperCase(); /**返回之前的排序字段与状态*/ String getOldSortName = PageUtil.getSortDescOrAsc(querySql); /**返回最新的排序字段与状态*/ querySql = querySql.replace(getOldSortName,sortNameDescAsc); } } page.setQuerySql(querySql); return page; } }
4 page.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/WEB-INF/c.tld" prefix="c"%> <c:set var="page" value="${sessionScope.page}" /> <c:set var="path" value="${pageContext.request.contextPath}" /> <c:set var="url" value="${param.url}" /> <c:set var="urlParams" value="${param.urlParams}" /> <c:set var="pathurl" value="${path}/${url}" /> <tr> <td colspan="5"> 共${page.totalCount}条记录 共${page.totalPage}页 每页显示${page.everyPage}条 当前第${page.currentPage}页 <c:choose> <c:when test="${page.hasPrePage eq false}"> <<首页 <上页 </c:when> <c:otherwise> <a href="${pathurl}?&pageAction=first${urlParams}"><<首页 </a> <a href="${pathurl}?pageAction=previous${urlParams}" /><上一页</a> </c:otherwise> </c:choose> || <c:choose> <c:when test="${page.hasNextPage eq false}"> 下页> 尾页>> </c:when> <c:otherwise> <a href="${pathurl}?&pageAction=next${urlParams}">下一页> </a> <a href="${pathurl}?pageAction=last${urlParams}" />末页>></a> </c:otherwise> </c:choose> <SELECT name="indexChange" id="indexChange" onchange="getCurrentPage(this.value);"> <c:forEach var="index" begin="1" end="${page.totalPage}" step="1"> <option value="${index}" ${page.currentPage eq index ? "selected" : ""}> 第${index}页 </option> </c:forEach> </SELECT> 每页显示:<select name="everyPage" id="everyPage" onchange="setEveryPage(this.value);"> <c:forEach var="pageCount" begin="5" end="${page.totalCount}" step="5"> <option value="${pageCount}" ${page.everyPage eq pageCount ? "selected" : ""}> ${pageCount}条 </option> </c:forEach> </select> </td> </tr> <div style='display: none'> <a class=listlink id="indexPageHref" href='#'></a> </div> <script> function getCurrentPage(index){ var a = document.getElementById("indexPageHref"); a.href = '${pathurl}?pageAction=gopage¤tPage='+index+'${urlParams}'; a.setAttribute("onclick",''); a.click("return false"); } function setEveryPage(everyPage){ var a = document.getElementById("indexPageHref"); var currentPage = document.getElementById('indexChange').value; a.href = '${pathurl}?pageAction=setpage&everyPage='+everyPage+'${urlParams}'; a.setAttribute("onclick",''); a.click("return false"); } function sortPage(sortName){ var a = document.getElementById("indexPageHref"); a.href = '${pathurl}?pageAction=sort&sortName='+sortName+'${urlParams}'; a.setAttribute("onclick",''); a.click("return false"); } </script>
- page.jar (5.9 KB)
- 下载次数: 305
- page-source.zip (4.3 KB)
- 下载次数: 278
- S2SH-Page-project.zip (119.1 KB)
- 下载次数: 330
- s2sh-page-all.zip (681.5 KB)
- 下载次数: 1199
评论
6 楼
zhengxiaojunkite
2015-03-17
你好,我把你的项目导入了,Deploy到Tomcat8,但是url:http://localhost:8888/S2SH-Page/出错:
type Status report
message /S2SH-Page/
description The requested resource is not available.
你的web.xml明明已经配置了:
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
请帮我看看,多谢多谢
type Status report
message /S2SH-Page/
description The requested resource is not available.
你的web.xml明明已经配置了:
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
请帮我看看,多谢多谢
5 楼
MLGB447593134
2012-03-05
嘿嘿 ,已经可以了,下下来的文件和原本有出入,一些个空格啊 注释什么的有问题,很难找出来。已经可以用了,非常感谢大神。
4 楼
MLGB447593134
2012-03-05
liuzidong 写道
请确定你的项目工程中存在相关的jstl的jar文件吗及在页面引用c.tld
请参考:JSTL 使用配置总结
http://liuzidong.iteye.com/blog/617003
分页方面的事你可以不用操心了,只要传递相应参数就行了!
完全照搬大神的代码,包也是按照前面一个工程导进来的,有jstl.jar就配了一下数据源,还没移植呢。/userList.jsp(65,4) Expecting "jsp:param" standard action with "name" and "value" attributes,报的这个错请参考:JSTL 使用配置总结
http://liuzidong.iteye.com/blog/617003
分页方面的事你可以不用操心了,只要传递相应参数就行了!
3 楼
liuzidong
2012-03-05
请确定你的项目工程中存在相关的jstl的jar文件吗及在页面引用c.tld
请参考:JSTL 使用配置总结
http://liuzidong.iteye.com/blog/617003
分页方面的事你可以不用操心了,只要传递相应参数就行了!
请参考:JSTL 使用配置总结
http://liuzidong.iteye.com/blog/617003
分页方面的事你可以不用操心了,只要传递相应参数就行了!
2 楼
MLGB447593134
2012-03-05
额 看错额
<jsp:param name="url" value="userAction!userList.action" />
这里报了一个错,不知道为啥上面这句什么意思
/userList.jsp(65,4) Expecting "jsp:param" standard action with "name" and "value" attributes
<jsp:param name="url" value="userAction!userList.action" />
这里报了一个错,不知道为啥上面这句什么意思
/userList.jsp(65,4) Expecting "jsp:param" standard action with "name" and "value" attributes
1 楼
MLGB447593134
2012-03-05
大神给的代码确定和网页上的一样吗,怎么没有分页功能,反而实现的是jquery
发表评论
-
【转载】Eclipse Class Decompiler——Java反编译插件
2018-06-24 11:09 1360参见:jd-eclipse 的安装和使用(最新版的) h ... -
Java多线程序源码
2016-06-24 15:04 10391、《Java多线程编程核心技术》源代码(高洪岩) 2、Jav ... -
Spring & Junit
2016-05-27 13:18 7571 测试基类(BaseJunit4Test) import ... -
XSS之xssprotect
2012-12-07 23:03 29496参考资料 1 跨网站脚本 ... -
myeclispe之图解weblogic81配置
2011-11-07 10:11 1622一 创建Weblogic81域(如下图) 注意事项:一般 ... -
Cannot forward a response that is already committed
2011-09-07 09:43 5586参考资料 1 Cannot forward a respons ... -
WebLogic之Cannot parse POST parameters of request解决方法
2011-09-06 15:31 11347参考资料 1 关于Cannot parse POST para ... -
WebLogic之weblogic.xml.jaxp.RegistrySAXTransformerFactory
2011-08-16 16:46 8778参考资料 1 Thread: java.lang.ClassC ... -
Quartz之一个任务绑定多个触发器
2011-08-15 16:27 5024参见官方示例: SchedulerFactory sf = ... -
Quartz之QuartzInitializerListener
2011-08-15 15:12 7923问题:我想在WEB容器启动时就执行任务怎么办呢 Quartz: ... -
Quartz之QuartzInitializerServlet
2011-08-15 14:39 9266问题:我想在应用程序启动之后去执行任务怎么办呢! Quartz ... -
jQuery与Java实现图片的剪切
2011-08-05 15:10 30518一 参考资料 1 jquery Jcrop 头像,logo截图 ... -
WebLogic之Session
2011-07-25 13:15 24049参考资料 1 关于WebLogic的Session丢失的问题 ... -
Frameset导致Cookies和Session丢失的原因及解决办法
2011-07-25 12:28 4376参考资料 1 Frameset导致Cookies和Sessio ... -
java,javascript对18位身份证格式的验证算法
2011-07-12 14:15 7110参考资料 1 java实现的18位身份证格式验证算法 http ... -
Quartz之CronTrigger
2011-07-11 15:01 14724参考资料 1 quartz 学习笔记 http://china ... -
Quartz之CronExpression
2011-07-08 16:15 33778参考资料 1 Spring中任务调度(Quartz篇)-续-c ... -
Quartz之SimpleTrigger
2011-07-08 15:21 27245SimpleTrigger: 它只能用于指定任务在一个特定时间 ... -
Quartz2之入门示例
2011-07-07 17:12 79213环境:XP+Myeclipse6.5+JDK1.6 q ... -
Sprint之java.util.Time
2011-07-06 16:17 1691参考资料 1 在Spring中使用JDK Timer进行任务调 ...
相关推荐
csdn只能上传50MB的,不够用,我上传的是网盘的下载地址,包含PDF和源码,PDF是226MB的清晰完整版,源码也是完整的。 附:源码使用方式,看到有.project的的,可以直接通过import导到myeclipse里面,没有这个文件的...
在这个"ssh Struts2.2+Hibernate3.6+Spring3.1+oracle 分页示例.zip"压缩包中,开发者提供了一个使用这些技术实现的分页功能示例。下面将详细介绍SSH框架以及Oracle数据库的分页技术。 **Struts2** 是一个基于MVC...
笔者开发时所用到的软件: apache-tomcat-7.0.25.exe eclipse-jee-indigo-SR2-win32.zip mysql-5.5.20-win32.msi navicat100_mysql_en.zip ...适合于初学Struts2+Spring+Hibernate的开发人员参考学习。
struts2.2.1 + hibernate3.6 +spring3.0.4 整合例子
Struts2、Hibernate和Spring是Java开发中的三大框架,它们的组合被称为SSH(Struts2、Hibernate、Spring),是企业级应用开发的经典选择。在这个项目中,使用的是Struts2.2.3、Hibernate3.6和Spring3.0.5的版本,这...
农业网站 (ssh) struts 2 +spring+ hibernate农业网站 (ssh) struts 2 +spring+ hibernate农业网站 (ssh) struts 2 +spring+ hibernate农业网站 (ssh) struts 2 +spring+ hibernate农业网站 (ssh) struts ...
已经完全打包制作的SSH框架,手动搭建,亲测可用!并且已经包含了jquery,json等插件,可直接使用Ajax功能!由于文件大小限制,jar包中删除了hibernate的核心jar,需要大家自己下个添加,其余jar包已经完整!测试...
SSH(Struts2、Hibernate和Spring)是一种流行的Java企业级应用程序开发框架的组合,用于构建高效、可维护的Web应用。下面将详细介绍如何整合Struts2.2.1、Hibernate3.6和Spring3.0.5。 首先,确保准备好所有必要的...
Struts2.2、Hibernate3.3和Spring2.5.6是三个经典的Java企业级开发框架,它们的整合能够实现MVC模式的高效应用,提供了数据持久化、业务逻辑控制以及模型视图分离等功能。在这个简单的CRUD案例中,我们将看到如何在...
这个压缩包"Struts2.3+Spring3.1+Hibernate3.6整合的jar包(全)"包含了进行SSH整合所需的全部依赖库,使得开发者能够在项目中方便地集成这三大框架。 首先,Struts2.3是基于MVC(Model-View-Controller)架构模式的...
项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2专注于MVC(Model-View-Controller)架构的实现,Spring提供了依赖注入和面向切面编程,而Hibernate则作为持久层框架,简化...
公文管理、申请审批、公告管理、会议管理、权限管理、个人办公、客户管理、人事等等。项目技术:Struts1.2 + Hibernate3.0 + Spring2 +DWR。java毕业设计 jsp毕业设计 ssh毕业设计
SSH(Struts2 + Spring + Hibernate)教务信息管理系统是一个基于Java技术的Web应用程序,它利用了三个核心的开源框架来构建高效、可维护且功能丰富的教育管理平台。SSH是Struts2、Spring和Hibernate的缩写,这些...
Struts2.3、Hibernate3.6和Spring3.0是Java Web开发中经典的MVC框架组合,被誉为SSH(Spring、Struts、Hibernate)架构。这个整合实例旨在展示如何将这三个框架有效地集成在一起,实现一个完整的用户添加功能。下面...
2012最新ssh2框架-struts2.3+hibernate4.1+spring3.1登录+注册(md5加密)带拦截器,mysql数据库,带分页功能, 只需修改com/resource/resourses.properties数据库连接即可使用
介绍了Java EE领域的三个开源框架:Struts 2、Spring和Hibernate。 这是第三部分,我上传的上限是60MB,所以不得不分包额!
【标题】"超市管理信息系统(SSH struts+spring+hibernate)"是一个综合性的IT项目,它基于流行的Java企业级开发框架SSH(Struts、Spring、Hibernate)来构建。SSH框架是许多大型企业级应用的首选,因为它提供了一个...