subversion地址如下:
https://svn.sourceforge.net/svnroot/powerstone/ps_paging
技术架构:
web层可以是任意的MVC框架,目前只实现了SpringMVC和Struts的版本(Struts版已经在weblogic7下跑通,tomcat5还不行);
dao层也没有任何限制,只要按照范例中的模式来做既可;
最终页面上用一个标签来显示翻页按钮等。
btw:谁有兴趣想写个webwork版本的,可以和我联系,或直接发个patch给我
---------------------------------
工作原理:想法很简单,就是应用设计模式里的"模板方法模式",把分页计算的逻辑封装在一个抽象父类(PagingController)里面,留下三个抽象方法:doHandleRequest(处理请求)、getTotalRecordsNumber(计算总记录数)、makeSearchCriteria(构造查询条件,可选)供子类型重写,使得子类型尽量的简单,让我们可以专注于业务逻辑而不需要处理分页逻辑。示例如下:[code]public class UserPagingController extends PagingController {
private final Logger logger = Logger.getLogger(this.getClass());
private UserDAO userDAO;
protected ModelAndView doHandleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
Map map = super.getSearchCriteria(request);
int beginNo = super.computeRecordsBeginNo(request);
int recordsNumber = super.computeRecordsNumberToRead(request);
List usersList = userDAO.findUsers(map, beginNo, recordsNumber);
logger.debug(usersList);
return new ModelAndView("usersList", "usersList", usersList);
}
protected int getTotalRecordsNumber(HttpServletRequest request) {
int result = userDAO.countUsers(super.getSearchCriteria(request));
logger.debug("users number================:" + result);
return result;
}
protected Map makeSearchCriteria(HttpServletRequest request) {
HashMap map = new HashMap();
String firstName = request.getParameter("firstName");
if (firstName != null && firstName.trim().length() > 0) {
map.put("firstName", firstName);
}
logger.debug(map);
return map;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
}[/code]
Struts版原理相同。
在页面显示翻页链接只需一行代码:
[code]<page:pagebar url="/user_query.html?" bordercolor="#F4F9FF" bgcolor="#F4F9FF"/>[/code]
https://svn.sourceforge.net/svnroot/powerstone/ps_paging
技术架构:
web层可以是任意的MVC框架,目前只实现了SpringMVC和Struts的版本(Struts版已经在weblogic7下跑通,tomcat5还不行);
dao层也没有任何限制,只要按照范例中的模式来做既可;
最终页面上用一个标签来显示翻页按钮等。
btw:谁有兴趣想写个webwork版本的,可以和我联系,或直接发个patch给我
---------------------------------
工作原理:想法很简单,就是应用设计模式里的"模板方法模式",把分页计算的逻辑封装在一个抽象父类(PagingController)里面,留下三个抽象方法:doHandleRequest(处理请求)、getTotalRecordsNumber(计算总记录数)、makeSearchCriteria(构造查询条件,可选)供子类型重写,使得子类型尽量的简单,让我们可以专注于业务逻辑而不需要处理分页逻辑。示例如下:[code]public class UserPagingController extends PagingController {
private final Logger logger = Logger.getLogger(this.getClass());
private UserDAO userDAO;
protected ModelAndView doHandleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
Map map = super.getSearchCriteria(request);
int beginNo = super.computeRecordsBeginNo(request);
int recordsNumber = super.computeRecordsNumberToRead(request);
List usersList = userDAO.findUsers(map, beginNo, recordsNumber);
logger.debug(usersList);
return new ModelAndView("usersList", "usersList", usersList);
}
protected int getTotalRecordsNumber(HttpServletRequest request) {
int result = userDAO.countUsers(super.getSearchCriteria(request));
logger.debug("users number================:" + result);
return result;
}
protected Map makeSearchCriteria(HttpServletRequest request) {
HashMap map = new HashMap();
String firstName = request.getParameter("firstName");
if (firstName != null && firstName.trim().length() > 0) {
map.put("firstName", firstName);
}
logger.debug(map);
return map;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
}[/code]
Struts版原理相同。
在页面显示翻页链接只需一行代码:
[code]<page:pagebar url="/user_query.html?" bordercolor="#F4F9FF" bgcolor="#F4F9FF"/>[/code]