订单系统 分页功能

前言

订单系统实现分页功能的思想是,

1、在后台,拼接html代码。

2、写数据到磁盘(即浏览器)。

3、前台,html代码里的js函数实现跳转功能。


流程(代码)

1、前台:发出请求

<tr bgcolor="b0a697" align="center">
							<td class="prettypetMnu prettypetMnuLink" url="/member/design/index.jsp?custCate=W">NEW DESIGN</td>
						    <td class="prettypetMnu prettypetMnuHover curr" url="/member/prod/index.jsp?cate=&amp;subCate=&amp;custCate=W">ALL DESIGN</td>
							<td class="prettypetMnu prettypetMnuLink" url="/member/promote/index.jsp?custCate=W">PROMOTION</td>
							<td class="prettypetMnu prettypetMnuLink" url="/member/catalog/index.jsp">CATALOG</td>
							<td class="prettypetMnu prettypetMnuLink" url="/member/index.jsp">MY
								ACCOUNT</td>
						</tr>


2、配置文件:配置由哪个业务控制器接收请求

<!-- 定义包 member,处理会员信息 -->
	<package name='bizProd' extends='member' extended-ns='prod' default='/json.jsp' package='com.ppet.prod'>
		<actions class='.CustProductAction'>
			<action name='index' handler='shell' method='list'>
				<result>index.jsp</result>
				<param name='viewMode' value='IMG'/>
			</action>
			<!--
			<action name='listClothes' method='list'><result>listClothes.jsp</result></action>
			<action name='listBed' method='list'><result>listBed.jsp</result></action>
			<action name='listCarrier' method='list'><result>listCarrier.jsp</result></action>
			<action name='listHarness' method='list'><result>listHarness.jsp</result></action>
			<action name='viewProduct' method='edit'><result>viewProduct.jsp</result></action>
			-->
			<action name='list' method='list'><result>list.jsp</result></action>
			<action name='image' method='list'><result>image.jsp</result></action>
			<action name='view' method='edit' handler='prod'><result>view.jsp</result></action>
			<action name='quick-view' method='edit'><result>quick-view.jsp</result></action>
			<action name='retrieve' method='retrieve'/>
			<action name='listView' handler='prod' method='list'><result>index.jsp</result><param name='viewMode' value='LIST'/></action>
		</actions>
		<action name='size-chart' handler='prod'><result>size-chart.html</result></action>
		<actions class='com.ppet.inv.CustStockAction'>
			<action name='stock-index' handler='prod' ><result>../stock/index.jsp</result></action>
			<action name='stock-list'  ><result>../stock/list.jsp</result></action>
		</actions>
	</package>


3、业务控制器(即Action)

//XXXAction.java

/**
	 * 获取产品列表
	 * @return 结果页面字符串
	 * @throws Exception
	 */
	public String list() throws Exception {
		CustProdCondBuilder cb = new CustProdCondBuilder();
		list(handler, cb, ProductOrderFactory.INST, lstAction);
		request.setAttribute("frmCustProdSearch", getModel());
 
		HttpSession session = request.getSession();
		System.out.println(session.getAttributeNames());
		return SUCCESS;
	}


//XXXAction的父类.java

/**
	 * 1.获取记录集<br>
	 * 2.把表单Bean列表设置为请求作用域的属性<p>
	 * @param handler
	 *            持久化层
	 * @param cb
	 *            条件构建器
	 * @param factory
	 *            排序类
	 * @param ac 获取列表
	 * @return 成功或失败
	 * @throws Exception
	 */
	protected <T extends Storable, V extends PagedSearchForm> String list(
			DataHandler<T> handler, JsonCondBuilder<V> cb,
			AbstractOrderFactory factory, ListAction ac) throws Exception {
		V form = (V) getForm();
//		doBeforeList(form);
		cb.build(form);
		OrderBy ob;
 
		if (form.sort != null && form.sort.length() > 0) {
			ob = form.convertByCol(factory);
		} else {
			ob = form.convertBy(factory);
		}
 
		BeanSet<T> bs = doRetrieve(handler, cb, ob, form);
		synchronized (ac) {
			ac.listed(this, this, bs, ob);
		}
		
		return SUCCESS;
	}
/**
	 * 将结果保存到 request 当中
	 * 
	 * @author fantasy
	 * 
	 */
	protected static class RequestListAction implements ListAction {
		String bsVar;
		String lstVar;
 
		public RequestListAction(String name) {
			bsVar = "bs" + name;
			lstVar = name + "s";
		}
 
		public <T extends Storable> void listed(JsonActionSupport act,
				JsonMngActionSupport action, BeanSet<T> bs, OrderBy ob) {
			HttpServletRequest request = act.getRequest();
			request.setAttribute(bsVar, bs);
			request.setAttribute(lstVar, bs.elements());
			request.setAttribute("orderBy", ob);
		}
	}


4、结果页面

<%
	List<Product> lst = (List<Product>) request
			.getAttribute("Products");
	
	// 判断产品列表是否为空
	if (lst.isEmpty()) {
		request.getRequestDispatcher("empty.jsp").include(request,
				response);
		return;
	}
 
	List<List<Product>> rows = ListUtil.listToListOfList(lst, 5);
	PageWriter pw = PageWriter.getInstance(pageContext, "bsProduct");
	pw.setTitleVisible(false);
	pw.setPageCount(10);
	pw.setJumpButton(false);
	pw.setNav("prod");
	pw.setFixedNumber(false);
	pw.setTotalMsgKey("prod.pages");
	pw.setTotalVisible(false);
	pw.setEmbraced(false);
%>
<div id='div_page1' style='float: right'>
		<%
			pw.write();
		%>
	</div>


5、工具类(PageWriter.java)

在这里,1)拼接分页功能的html代码。2)写数据到浏览器客户端(即发送响应数据html代码到浏览器客户端)。

剩下的就是,在前台实现html代码里的js函数来实现跳转功能。

private void writeImpl() throws JspException, IOException {
		JspWriter out = pageContext.getOut();
		out.println(build());
	}
private String buildImpl(BeanSet<?> bs,HttpServletRequest request)throws JspException, IOException{
		StringBuffer sb=new StringBuffer();
		int iCurPage=bs.getCurrentPage();
		int iMaxPage=bs.getPageCount();
		int rowCount=bs.getRowCount();
		String sStyleClass=(styleClass==null?"":" class='"+styleClass+"'");
		if(form!=null ){
			sb.append("<form name=\""+form+"\" method='GET' onsubmit=\"return "+doJump+"(this.page.value)\">");
		}
		sb.append("<table cellpadding=0 cellspacing=0 border=0>");
		sb.append("<tr>");
		if(rowCount>0){
			Locale loc=getLocale(request);
			String total=null;
			NavButtonProvider navProvider=null;
			if(nav!=null){
				navProvider=navs.get(nav);
			}
			if(navProvider==null){
				navProvider=navBtnProvider;
			}
			if((navProvider==null || navProvider.isTitleVisible())){
				total=mergeTotal(rowCount,iMaxPage,loc);
			}
			if(total!=null){
				if(crlf ){
					sb.append("<td"+sStyleClass+" align='"+align+"' colspan=").append(fixedNumber?3:2).append(">").append(total).append("</td></tr><tr><td"+sStyleClass+" >");
				}else{
					sb.append("<td"+sStyleClass+" noWrap>").append(total).append("</td><td"+sStyleClass+" noWrap>");
				}
			}else{
				sb.append("<td"+sStyleClass+" noWrap>");
			}
			NavBarNumber nav=getNav(loc);
			synchronized(nav){
				nav.setPageContext(pageContext);
				nav.setPageCount(iMaxPage); //页面总数
				nav.setCurPage(iCurPage);
				nav.setMaxPage(iMaxPage);   //同上
				nav.setFixedNumber(fixedNumber);
				nav.setDoJump(doJump);
				nav.setHrefClass(hrefClass);
				nav.setColorOfCurrPageNo(currPageColor);
				if(navProvider!=null){
					nav.setNavButton(navProvider);
				}
				nav.setShowTotal(totalVisible);
				boolean e=nav.isEmbraced();
				nav.setEmbraced(embraced);
				sb.append(nav.build());
				nav.setEmbraced(e);
				nav.setNavButton(navBtnProvider);
				nav.setShowTotal(true);
			}
			sb.append("</td><td noWrap>");
			if(jumpButton){
				JumpButtonProvider jumpProvider=null;
				if(jump!=null){
					jumpProvider=jumps.get(jump);
				}
				if(jumpProvider==null){
					jumpProvider=jumpBtnProvider;
				}
				sb.append(" <input type='text' name='page' value='"+iCurPage+"' "+jumpProvider.getBoxStyle()+"> </td><td noWrap> ");
				sb.append(jumpProvider.getButton());
			}
		}
		sb.append("</td>");
		sb.append("</tr>");
		sb.append("</table>");
		if(form!=null){
			sb.append("</form>");
		}
		
		return sb.toString();
	}



---------

拼接的html代码,如下:

<html>
 <head></head>
 <body>
  <form name="frmJump" method="GET" onsubmit="return doJump(this.page.value)">
   <table cellpadding="0" cellspacing="0" border="0">
    <tbody>
     <tr>
      <td nowrap="">51 Items Found in 2 Pages:</td>
      <td nowrap="">
       <table cellpadding="0" cellspacing="0" width="100%" align="center">
        <tbody>
         <tr>
          <td>&nbsp;<img src="/img/btn_pageprev02.gif" border="0" name="navBtnFirst" />&nbsp;&nbsp;</td>
          <td>&nbsp;<img src="/img/btn_pageprev01.gif" border="0" name="navBtnPrev" />&nbsp;&nbsp;</td>
          <td>&nbsp;<font color="red">1</font>&nbsp;&nbsp;<a href="#" onclick="javascript:doJump(2);return false;" title="跳转到第 2 页">2</a>&nbsp;&nbsp;</td>
          <td>&nbsp;<a href="#" onclick="javascript:doJump(2);return false;" title="跳转到第 2 页"><img src="/img/btn_pagenext01.gif" border="0" name="navBtnNext" /></a>&nbsp;&nbsp;</td>
          <td>&nbsp;<a href="#" onclick="javascript:doJump(2);return false;" title="跳转到第 2 页"><img src="/img/btn_pagenext02.gif" border="0" name="navBtnNext" /></a>&nbsp;</td>
         </tr>
        </tbody>
       </table></td>
      <td nowrap=""></td>
     </tr>
    </tbody>
   </table>
  </form>
 </body>
</html>


你可能感兴趣的:(分页技术,分页功能)