JspPageTag+Struts+Hibernate修改了商户积分排名的翻页 [ 原创 ]

来源:互联网 发布:剑网三捏脸花姐数据 编辑:程序博客网 时间:2024/04/29 14:37

 Jsp Pager Tag 适用带有页码的翻页功能(<<1 2 3 4 >>),形式风格多种多样,变换起来十分简单。

-------------
环境配置:
-------------
1,如果使用Struts并且使用DispatchAction,那么需要修改一下Jsp Pager Tag的代码,如何修改可以参考:
http://blog.csdn.net/srx/archive/2005/10/06/495827.aspx
最新版本请到http://jsptags.com下载,之后把重新编译的jar放到工程的WEB-INFO/lib/下。
并把pager-taglib.tld放到WEB-INFO/下。
web.xml:
<taglib-uri>
      http://jsptags.com/tags/navigation/pager
    </taglib-uri>
    <taglib-location>
      /WEB-INF/pager-taglib.tld
    </taglib-location>
  </taglib>

2,Strus (略)
<action path="/u2bmanpointlist"
    name="U2BmanPointForm"
    parameter="method"
    type="cn.sintal.action.front.U2BmanPointListAction">
     <forward name="FJ0" path="/WEB-INF/jsp/front/FJ0.jsp"/>
     <forward name="FJ1" path="/WEB-INF/jsp/front/FJ1.jsp"/>
    </action>
3,Hibernate(略)

--------------
   具体程序:
---------------

1,Action
Action:
==========================================================================
public ActionForward displayList(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {

  try {
   int MAX_PAGE_ITEMS = 2;
   U2CheckSessionBo.front_Neednt_Login(request, mapping);

   // 获得城市id
   String cityid = request.getParameter("usercityid");
   if (cityid == null || cityid.equals("")) {
    cityid = "1";
   }
   request.setAttribute("usercityid", cityid);

   // 查询工具类
   DBUtil obj = new DBUtil();

   // 列表hql
   StringBuffer sb = new StringBuffer();
   sb.append("select from BBusinessman bman where ");
   sb.append(" bman.flag=? and bman.c.id=? ");
   sb.append(" order by bman.point desc");
   String hql_list = sb.toString();

   // 得到总记录数的hql
   String hql_count = " select count(*) from BBusinessman bman where bman.flag=? and bman.c.id=? ";

   // 查询条件
   Object[] data = new Object[] { "0", new Integer(cityid) };

   // 查询对象
   BBusinessmanDAO dao = new BBusinessmanDAO();

   // 从页面获得偏移量
   String offset = request.getParameter("pager.offset");
   if (offset == null) {
    // 第一次查询,需要查出记录总数
    int count = 0;
    count = obj.getAllNumber(hql_count, data, dao);
    // 只需要下传页面总记录数,每页记录数即可。
    request.getSession().setAttribute("resultSize", "" + count);
   }
   log.info("the varname=offset ,value=" + offset);
   if (offset == null || offset.equals("")) {
    offset = "0";
   }
   int intoffset = 0;
   if (offset != null && !offset.equals("")) {
    intoffset = Integer.parseInt(offset);
   }

   // 查询处索要的list
   List tmp = obj.doSearch(hql_list, data, dao, intoffset,
     MAX_PAGE_ITEMS);
   request.setAttribute("u2bmanpointlist", tmp);

  } catch (Exception e) {
   log.error(e.getMessage());
   return mapping.findForward("error");
  }

  return mapping.findForward("FJ0");
 }

2,Action里使用到的工具类:
DBUtil.java
/**
  * 得到总数
  *
  * @param hql
  * @param data
  * @param dao
  * @return
  * @throws Exception
  */
 public int getAllNumber( String hql , Object[] data ,_RootDAO dao )
 throws Exception{
  int count = 0 ;
  Session session = null;
  try {
   _RootDAO.initialize();

   session = dao.getSession();
   if (session == null || session.isOpen() == false) {
    session = dao.createNewSession();
   }

   Query query = dao.getQuery(hql, session);

   if (query == null) {
    throw new Exception("query is null ");
   }
   
   if (data != null)
    log.info("data.length=" + data.length);
   
   for (int i = 0; data != null && i < data.length; i++) {
    System.out.print("the aql is =" + hql);
    System.out.println("data is " + data[i]);
    query.setParameter(i , data[i]);
   }
   
   Integer retInt = (Integer)(query.uniqueResult());
   if( retInt!=null )
    count = retInt.intValue();
   return count;
  } catch (SQLException e) {
   log.error(e.getMessage());
   throw e;
  } catch (HibernateException e1) {
   log.error(e1.getMessage());
   throw e1;
  } finally {
   if (session != null && session.isOpen())
    session.close();
  }

  
 }
 
 /**
  * 得到某页的数据
  * @param hql
  * @param data
  * @param dao
  * @param offset
  * @param pagenum
  * @return
  * @throws Exception
  */
 public List doSearch(String hql, Object[] data, _RootDAO dao, int offset,
   int pagenum) throws Exception {
  Session session = null;
  try {
   _RootDAO.initialize();

   session = dao.getSession();
   if (session == null || session.isOpen() == false) {
    session = dao.createNewSession();
   }

   Query query = dao.getQuery(hql, session);

   if (query == null) {
    throw new Exception("query is null ");
   }
   
   if (data != null)
    log.info("data.length=" + data.length);
   
   for (int i = 0; data != null && i < data.length; i++) {
    System.out.print("the aql is =" + hql);
    System.out.println("data is " + data[i]);
    query.setParameter(i , data[i]);
   }

   query.setFirstResult(offset);
   query.setMaxResults(pagenum);
   List retlist = query.list();
   return retlist;
  } catch (SQLException e) {
   log.error(e.getMessage());
   throw e;
  } catch (HibernateException e1) {
   log.error(e1.getMessage());
   throw e1;
  } finally {
   if (session != null && session.isOpen())
    session.close();
  }
 }

 3,Jsp
===============================================

<%@ taglib uri="/WEB-INF/pager-taglib.tld" prefix="pg" %>
  <TABLE width=760 border=0 align=center cellPadding=0 cellSpacing=0 bgcolor="#F2F5FA">
  <tr>
    <td height="200" colspan="7" bgcolor="#F2F5FA">&nbsp;</td>
    <td width="704" height="300" align="right" bgcolor="#F2F5FA"><TABLE cellSpacing=1 cellPadding=5 width="95%" align=center bgColor=#325597 border=0>
      <TR bgcolor="2C6DB1" background="/front/img/sintal_register_107.gif">
        <TD width="50" align=center background="/front/img/sintal_register_107.gif" bgcolor="2C6DB1" class=text4>排名</TD>
        <TD width="100" align=center background="/front/img/sintal_register_107.gif" bgcolor="2C6DB1" class=text4>商户名称</TD>
        <TD width="200" align=center background="/front/img/sintal_register_107.gif" bgcolor="2C6DB1" class=text4>地址</TD>
        <TD width="101" align=center background="/front/img/sintal_register_107.gif" bgcolor="2C6DB1" class=text4>电话</TD>
        <TD width="101" align=center background="/front/img/sintal_register_107.gif" bgcolor="2C6DB1" class=text4>积分</TD>
        <TD width="50" align=center background="/front/img/sintal_register_107.gif" bgcolor="2C6DB1" class=text4> &nbsp;分类</TD>
      </TR>
     
  <bean:define id="listsize" name="resultSize" type="String"/>
  <pg:pager items="<%=(Integer.parseInt(listsize))%>" 
       maxPageItems="<%=2 %>"
           maxIndexPages="<%=5%>"
           isOffset="<%= true %>"
           url="/u2bmanpointlist.do?method=displayList"
     export="offset,currentPageNumber=pageNumber"
     scope="request"
  >

 
   <!-- 这样在uri中增加一个parameter.可以增加多个-->
  <bean:define id="cid" name="usercityid" type="String" scope="request"/>
  <pg:param name="usercityid" value="<%=cid%>"/>

  <!-- 从page对象中取得属性值firstItem , lastIterm -->
  <pg:page export="firstItem, lastItem">
  <!-- 显示结果集的摘要信息 -->
   <div class="resultInfo">
    当前页数:<strong><bean:write name="currentPageNumber"/></strong> ,本页从第 <strong><%= firstItem %></strong> 条到第 <strong> <%= lastItem %></strong>条   <strong>/</strong> 总记录数 <strong><bean:write name="resultSize"/></strong>条
   </div>
  </pg:page>
 
   <!-- begin iterator -->
  <logic:present name="u2bmanpointlist">
       <logic:notEmpty name="u2bmanpointlist">
       <logic:iterate id="u2bmanobj" name="u2bmanpointlist" indexId="ind">
        <bean:define id="var_bman_indx" name="ind" type="Integer"/>
      <% if( var_bman_indx.intValue()%2==0){%>
          <TR bgcolor="#E3F1FE">
          <%}else{%>
          <TR bgcolor="#C1DAF7">
          <%}%>
        <TD align="center" class=text1>
   <%=(var_bman_indx.intValue()+offset.intValue()+1)%></TD>
        <TD align="center" class=text1>

        <a target="_blank" class="black" href="/u2bmanpointlist.do?method=detail&bid=<bean:write name="u2bmanobj" property="id"/>">
        <bean:write name="u2bmanobj" property="companyName"/></a>
       
        </TD>
        <TD align="center" class=text1><bean:write name="u2bmanobj" property="companyAddress"/></TD>
        <TD align="left" class=text1><bean:write name="u2bmanobj" property="telephone"/></TD>
        <TD align="center" class=text1><bean:write name="u2bmanobj" property="point" format="###,###"/></TD>
        <TD align="center" class=text1><bean:write name="u2bmanobj" property="ty.tyName"/></TD>
      </TR>
         </logic:iterate>
        </logic:notEmpty>
      </logic:present> 
      <!-- end iterator-->
    </TABLE>
   
     
      <jsp:include page="/alltheweb.jsp" flush="true"/><br>     
      <%
      /**这些是各种不同的风格。
      %>
      <jsp:include page="/google.jsp" flush="true"/><br>
      <jsp:include page="/yahoo.jsp" flush="true"/><br>
      <jsp:include page="/altavista.jsp" flush="true"/><br>
      <jsp:include page="/lycos.jsp" flush="true"/><br>
      <jsp:include page="/texticon.jsp" flush="true"/><br>
      <jsp:include page="/simple.jsp" flush="true"/><br>
      <%
      **/
      %>
      </div></td>
  </pg:pager>
</table>

4,各种翻页风格中的一种。
<%@ page session="false" %>
<%@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg" %>
<jsp:useBean id="currentPageNumber" type="java.lang.Integer" scope="request"/>
<style type="text/css">
<!--
.resultInfo {
   color:#f80;
   background-color: transparent;
   text-transform:Uppercase;
   padding: 5px 5px 5px 0px;
   margin: 0;
   font-size: 1em;
}
.rnav {
    padding: 0;
    font-family: Verdana, Arial, Helvetica, Sans-serif;
    font-size: 1em;
    color:#333;
    background-color:transparent;
    font-weight:bold;
    font-size: 1em;
}
.rnavLabel {
    text-transform: Uppercase;
    color:#f80;
    background-color: transparent;
}
a.rnavLink {
    color: #415481;
    background-color: transparent;
}
a:visited.rnavLink {
    color: #8A9CBD;
    background-color: transparent;
}
a:hover.rnavLink {
    color: #f80;
    text-decoration: none;
    background-color: transparent;
}
-->
</style>
<pg:index export="totalItems=itemCount">
<pg:page export="firstItem, lastItem">
<div class="resultInfo">
Displaying results <strong><%= firstItem %>-<%= lastItem %></strong> of <strong><%= totalItems %></strong> found
</div>
</pg:page>

<div class="rnav">
<span class="rnavLabel">Results:</span>&nbsp;
<pg:prev export="pageUrl">
<a href="<%= pageUrl %>" class="rnavLink">&#171;&nbsp;Prev</a>&nbsp;
</pg:prev>
<pg:pages export="pageUrl,pageNumber,firstItem,lastItem">
    <% if (pageNumber == currentPageNumber) { %>
&nbsp;<span class="rnavCurr"><%= firstItem %>-<%= lastItem %></span>
    <% } else { %>
&nbsp;<a href="<%= pageUrl %>" class="rnavLink"><%= firstItem %>-<%= lastItem %></a>
    <% } %>
</pg:pages>
<pg:next export="pageUrl">
&nbsp;&nbsp;<a href="<%= pageUrl %>" class="rnavLink">Next&nbsp;&#187;</a>
</pg:next>
</div>
</pg:index>

总结:

使用它的好处是:
1,Action编码比较少,只需要把总记录数,每页记录数两个变量。
2, 风格变化十分方便,它提供了几种外观,定制起来也十分方便.
4, 不用时用隐藏变量了,不需要额外的form.
5, 向url写参数十分方便.例如<pg:param name="" value=""/>就可以传递参数.

缺点:
1,页面上仍不可避免地使用了少量的脚本(“<%=%>”这样的语句)。