dao中的方法
/**
 * 根据pid还有交易状态查询出交易成功的交易记录然后进行时间倒序
 */
public List<Shopnote> getSuccessList(String pid, int tradeStatus) {
List<Shopnote> Shopno = new ArrayList<Shopnote>();// 初始化list
Query query = sf
.getCurrentSession()
.createQuery(
"from Shopnote as Shopn where Shopn.userPid=:pid and tradeStatus=:tradeStatus order by Shopn.tradeTime desc")
.setString("pid", pid).setInteger("tradeStatus", tradeStatus);//sql语句
//如果大于0则返回给list
if (query.list().size() > 0) {
Shopno = query.list();
}
return Shopno;
}
/**
 * 根据根据userPid、交易状态、交易时间、交易流水号进行查询
 */
public List searchSucc(String userPid, int tradeStatus, String tradeTime,
String tradeNumber) {
Criteria c = sf.getCurrentSession().createCriteria(Shopnote.class);// 初始化Criteria
if(userPid!=null&&
!userPid.equals("")){
c.add(Restrictions.like("userPid",userPid,MatchMode.ANYWHERE));//根据userPid查询
}
if(tradeStatus>-1){
c.add(Restrictions.sqlRestriction("tradeStatus ="+tradeStatus));//根据交易状态查询
}
if(tradeTime!=null&&
!tradeTime.equals("")){
c.add(Restrictions.like("tradeTime",tradeTime,MatchMode.ANYWHERE));//根据交易时间查询
}
if(tradeNumber!=null&&
!tradeNumber.equals("")){
c.add(Restrictions.like("tradeNumber",tradeNumber,MatchMode.ANYWHERE));//根据交易流水号查询
}
return c.list();
}
action中的方法
/**
     * 根据id查询全部的方法
     * @return
     * @throws Exception
     */
public String getshopID() throws Exception {
String faild="find";//跳转的返回
if(id==0){
faild="find"; //跳转到登录注册页面
}else{
usres=shopnoteService.getUser(id);//根据id查询
listshop=shopnoteService.getAlllLst(usres.getUserPid());//根据Userpid查询
if(listshop.size()<1){
ActionContext.getContext().put("message", "<font color='red'>尊敬的用户,您没有消费交易记录</font>");//设定页面返回信息
}
// 获取当前会话
HttpSession session = ServletActionContext.getRequest()
.getSession();
// 将登陆的用户保存到SessionScope中
session.setAttribute("user", usres);
 faild="toShopno";//跳转到用户交易记录信息页面
}   
     return faild;
    }
/**
 * 查询全部交易记录的方法
 * @return
 * @throws Exception
 */
public String selShopno() throws Exception {
String filePath="toShopno";//返回值
String tradeTime=year+"-"+yue;//设定时间
listshop=shopnoteService.search(userPid, tradeStatus, tradeTime, tradeNumber, tradeType);//联合查询
if(listshop.size()<1){
ActionContext.getContext().put("message", "<font color='red'>尊敬的用户,没有您要查询的信息!</font>");//设定页面返回信息
}
return filePath;
}
页面的代码
<s:iterator var="listshop" value="listshop">
<tr>
<td height="25" bgcolor="#FFFFFF" class="border_bm">
<s:property value="#listshop.tradeTime.substring(0, 10)" />
</td>
<td bgcolor="#FFFFFF" class="border_bm">
<s:property value="#listshop.tradeNumber" />
</td>
<td bgcolor="#FFFFFF" class="border_bm">
<s:property value="#listshop.tradeType" />
</td>
<td bgcolor="#FFFFFF" class="border_bm">
<s:property value="#listshop.tradeRecords" />

</td>
<td bgcolor="#FFFFFF" class="border_bm">
<s:property value="#listshop.tradeAmount" />

</td>
<td bgcolor="#FFFFFF" class="border_bm">
<s:property value="#listshop.tradePreferential" />

</td>
<td bgcolor="#FFFFFF" class="border_bm">
    <s:if test="#listshop.tradeStatus==1">
     已支付
</s:if>
<s:else>
未支付
</s:else>
</td>
</tr>
</s:iterator>
可不可以根据前台显示的结果直接分页。一开始点进去是默认显示全部的。然后是根据查询条件下边做的显示。小弟想的是都是在一个迭代循环中显示的。可不可以直接根据这个显示迭代进行分页。

解决方案 »

  1.   

    我插不上去图片。。有哪位大侠想看看效果图的。。加小弟qq846489484。。谢谢了。我用qq截图发给你。
      

  2.   

    分页不是应该在Dao层传个Page对象进去就分好吗.? 返回到页面的结果应该是已经分完页的捏.!分页本来就应该这样设计阿.!
    不明白你那样设计有何意义  
      

  3.   

    前台分页的话, 你就只查询一次数据库, 查完了缓存(这个缓存就缓存做到Action的属性便于你前台取) 然后前台每次显示缓存的时候显示你这个List的第m-n条记录.!
    是要这样的么.?
      

  4.   

    我想的是,既然我都是在一个页面标签list中的显示。那么可不可以直接把这个list分一下。不用考虑后台。
    。这只是一个想法。都可以只要做出来就行。我现在的分页一开始分。查询之后就分不了。
      

  5.   

    应该首先定义一个Page对象, 这个Page对象有当前页,最大页数,总记录条数等等属性.!
    在查询的时候就分好的话:
    在Dao层的方法里面传入这个Page对象, 分页分好了以后,你前台拿到的就已经是分毫页的数据了.!
    如果你非要前台分页,那就是数据库每次根据where条件查出来全部的,这个集合赋值给Action的属性,每次前台还是要根据这个page对象,你那个iterator标签可以设置begin end属性的, 把你的起始数据和药多少条数据用page对象的相应属性赋值上去, 不就ok了.? 当然你如果查询条件变了就再去查一次数据库
      

  6.   

    代码太长了,难得看。跟你说说分页的原理吧
    1、页面上得定义一个参数:当前页。并且点击上一页和下一页的时候这个参数分别-1和+1
    2、控制层做几个处理:a、根据你一页要显示多少条数据和当前页去判断要查询哪几条数据,比如每页显示15条数据,当前页是第四页,那么下一页就因该显示61-75条数据,这个控制的参数我习惯性叫它游标。b、计算出总页数。
    3、dao层做两件事:a、查询总数。因为要知道一起分了多少也,这个总数就不能少。b、根据游标进行查询,并且返回结果。若每页显示15条数据,那么这个查询就只查询出15条数据。具体实现的话有很多方法,可以用jdbc也可以用hibernate。他们都提供了分页的方法。
      

  7.   

    把显示内容分页就按我在9L说的那个iterator中去分吧
      

  8.   

    直接把显示的结果list。分页这种办法可行吗。
      

  9.   

    为什么要在前台分页啊?你不觉得这样传输的数据量非常大吗?如果你真想这么实现,我建议你可以做这样做:用N个DIV等存一页数据,循环时设置一个迭代变量,当迭代变量打到每页最大值时重新生成一个DIV,然后通过JS控制那个DIV显示,其余的隐藏,这种方法服务器向客户端发送的数据量太大,网路稍微不好就会丢包,客户端收到的信息就会不完整。
      

  10.   

    刚做完一个struts2.1.8+Hibernate3.3+spring2.5.6+extjs3.2图书管理系统,里面又分页:
    先查一下有多少条记录,然后根据start和limit返回给前台相应记录。千万不能一次性都加载了,然后前台再分页,那样的话数据一多,就玩完。我会共享源码的 你可以参考一下
      

  11.   

    可以在后台分页.setFirstResult((currentPage-1)*pageSize);//设置返回的结果集从第几条开始.setMaxResults(pageSize);//设置本次查询返回的结果数就是我那个第一次过来显示全部和。第二次的查询之后显示。2次分页弄不好。以前只做过一个方法的分页。而这次是2个方法的分o(∩_∩)o 哈哈我再研究研究