博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分页技巧_实现第一个分页功能(回复列表中的分页)
阅读量:6324 次
发布时间:2019-06-22

本文共 10014 字,大约阅读时间需要 33 分钟。

分页技巧_实现第一个分页功能(回复列表中的分页)

========================================

假设共25条数据,每页显示10条,则共3页

    first   max

---------------------------------

第1页  0     10

第2页  10    10

第3页  20    10

first = (pageNum - 1) * pageSize(当前页-1)* 10

max = pageSize每页显示几条 最多获取几条 不够剩余的都给它

TopicAction.java

@Controller@Scope("prototype")public class TopicAction extends BaseAction
{ private Long forumId; //并提供getset方法,方便准备分页信息 private int pageNum = 1; //当前页,默认第一页 private int pageSize = 10; //每页显示多少条记录,每页显示10条 /** 显示单个主题(主帖+回帖列表) */ public String show() { // 准备数据:topic Topic topic = topicService.getById(model.getId()); ActionContext.getContext().put("topic", topic); //准备数据:replyList// List
replyList = replyService.findByTopic(topic);// ActionContext.getContext().put("replyList", replyList); //准备分页信息 PageBean pageBean =replyService.getPageBeanByTopic(pageNum, pageSize, topic);//分页信息找service查询 ActionContext.getContext().getValueStack().push(pageBean);//放在栈顶 return "show"; } /** 发表新主题页面 */ public String addUI() { //准备数据 Forum forum = forumService.getById(forumId); ActionContext.getContext().put("forum", forum); return "addUI"; } /** 发表新主题 */ public String add() { //封装 // >>表单参数,已经封装了title,content //model.setTitle(title); //model.setContent(content); model.setForum(forumService.getById(forumId)); // >>当前直接获取的信息 model.setAuthor(getCurrentUser());//当前登录用户 model.setIpAddr(ServletActionContext.getRequest().getRemoteAddr());//当前请求中的ip model.setPostTime(new Date());//当前时间 topicService.save(model); return "toShow";//转到新主题的显示页面 } public Long getForumId() { return forumId; } public void setForumId(Long forumId) { this.forumId = forumId; } public int getPageNum() { return pageNum; } public void setPageNum(int pageNum) { this.pageNum = pageNum; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; }}

ReplyService.java

public interface ReplyService extends DaoSupport
{ /** * 查询指定主题中所有的回复列表,排序:按发表时间升序排序 * @param topic * @return */ List
findByTopic(Topic topic); /** * 查询分页信息 * @param pageNum * @param pageSize * @param topic * @return */ PageBean getPageBeanByTopic(int pageNum, int pageSize, Topic topic);}

ReplyServiceImpl.java

@Service@Transactional@SuppressWarnings("unchecked")public class ReplyServiceImpl extends DaoSupportImpl
implements ReplyService{ public List
findByTopic(Topic topic) {
//当前主题所有的回复列表 return getSession().createQuery(// "FROM Reply r WHERE r.topic=? ORDER BY r.postTime ASC")// .setParameter(0, topic)// .list(); } @Override public void save(Reply reply) { //1.保存 getSession().save(reply); //2.维护相关的信息 Topic topic = reply.getTopic(); Forum forum = topic.getForum(); forum.setArticleCount(forum.getArticleCount() + 1); //文章数量(主题数+回复数) topic.setReplyCount(topic.getReplyCount() + 1); //回复数量 topic.setLastReply(reply); //最后发表的时间 topic.setLastUpdateTime(reply.getPostTime());//最后更新的时间(主题的发表时间) getSession().update(topic); getSession().update(forum); } public PageBean getPageBeanByTopic(int pageNum, int pageSize, Topic topic) { //查询本页的数据列表 List list = getSession().createQuery( "FROM Reply r WHERE r.topic=? ORDER BY r.postTime ASC")// .setParameter(0, topic)// .setFirstResult((pageNum - 1) * pageSize)// .setMaxResults(pageSize)// .list(); //查询总记录数量 Long count = (Long)getSession().createQuery(// "SELECT COUNT(*) FROM Reply r WHERE r.topic=?")// .setParameter(0, topic)// .uniqueResult(); return new PageBean(pageNum, pageSize, count.intValue(), list); }}

PageBean.java

/** * 分页功能中的一页的信息 * @author yejin * */public class PageBean {        //指定的或是页面参数    private int currentPage;    // 当前页    private int pageSize;        // 每页显示多少条        //查询数据库    private int recordCount;    // 总记录数    private List recordList;    // 本页的数据列表        //计算    private int pageCount;        // 总页数    private int beginPageIndex;    // 页码列表的开始索引(包含)    private int endPageIndex;    // 页码列表的结束索引(包含)        /**     * 只接受前四个必要的属性,会自动的计算出其他3个属性的值     * @param currentPage    当前页     * @param pageSize        每页显示多少条     * @param recordCount    总记录数     * @param recordList    本页的数据列表     */    public PageBean(int currentPage, int pageSize, int recordCount, List recordList) {        this.currentPage = currentPage;        this.pageSize = pageSize;        this.recordCount = recordCount;        this.recordList = recordList;                //只接受前四个必要的属性,会自动的计算出其他3个属性的值        //计算总页码        pageCount = (recordCount + pageSize - 1) / pageSize;                //计算beginPageIndex 和 endPageIndex        // >> 总页数不多于10页,则全部显示        if(pageCount <= 10) {            beginPageIndex = 1;            endPageIndex = pageCount;        }        // >> 总页数多于10页,则显示当前页附近的10个页码        else{            //当前页附近的10个页码(前4个 + 当前页 + 后5个)            beginPageIndex = currentPage - 4;            endPageIndex = currentPage + 5;            //当前面的页码不足4个时,则显示前10个页码            if(beginPageIndex < 1) {                beginPageIndex = 1;                endPageIndex = 10;            }            //当后面的页码不足5个时,则显示后10个页码            if(endPageIndex > pageCount) {                endPageIndex = pageCount;                beginPageIndex = pageCount - 10 + 1;            }        }    }        public List getRecordList() {        return recordList;    }    public void setRecordList(List recordList) {        this.recordList = recordList;    }    public int getCurrentPage() {        return currentPage;    }    public void setCurrentPage(int currentPage) {        this.currentPage = currentPage;    }    public int getPageCount() {        return pageCount;    }    public void setPageCount(int pageCount) {        this.pageCount = pageCount;    }    public int getPageSize() {        return pageSize;    }    public void setPageSize(int pageSize) {        this.pageSize = pageSize;    }    public int getRecordCount() {        return recordCount;    }    public void setRecordCount(int recordCount) {        this.recordCount = recordCount;    }    public int getBeginPageIndex() {        return beginPageIndex;    }    public void setBeginPageIndex(int beginPageIndex) {        this.beginPageIndex = beginPageIndex;    }    public int getEndPageIndex() {        return endPageIndex;    }    public void setEndPageIndex(int endPageIndex) {        this.endPageIndex = endPageIndex;    }}

topicAction >>show.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>    查看主题:${topic.title}    <%@ include file="/WEB-INF/jsp/public/commons.jspf" %>    
查看主题
>
论坛
>
${topic.forum.name}
>> 帖子阅读
  本帖主题:${topic.title}
回复
移动到其他版块 精华 置顶 普通
 
${topic.author.name}
${topic.content}
${author.name}
${content}
页次:${currentPage}/${pageCount}页   每页显示:${pageSize}条   总记录数:${recordCount}条
<%--当前页 --%>
${num}
<%--非当前页 --%>
${num}
转到:
  快速回复  
标题
内容
说明:
1,主帖只在第一页显示。
2,只有是管理员才可以进行“移动”、“编辑”、“删除”、“精华”、“置顶”的操作。
3,删除主帖,就会删除所有的跟帖(回复)。

==============================

FROM     必须

  实体名

WHERE    可选

  条件1 AND 条件2 AND ... 条件n

ORDER BY   可选

  属性1, 属性2, ... 属性n

==============================

QueryHelper

  用于辅助拼接HQL语句

  addCondition("t.type=?", "精华");

  d.id BETWEEN ? AND ?

  d.parent=?

  d.parent IS NULL

 

转载于:https://www.cnblogs.com/justdoitba/p/7965566.html

你可能感兴趣的文章
shell实现多级菜单脚本编写
查看>>
Lua1.1 虚拟机指令分析
查看>>
R语言编程艺术(4)R对数据、文件、字符串以及图形的处理
查看>>
shell之RDS备份+判断是否传输完成
查看>>
Shell获取当前主机ip地址
查看>>
init : Failed to spawn readahead-collector main process :unable to execute ...
查看>>
Saltstack安装 (CentOS7.x)
查看>>
Python学习记录-2016-01-16
查看>>
我的友情链接
查看>>
决心书
查看>>
如何从本地把项目上传到github
查看>>
Exception sending context initialized event to lis
查看>>
IPSec ***基于ASA的配置实现
查看>>
Spring Boot 注解大全
查看>>
洞悉物联网发展1000问之为什么物联网项目很难融资?
查看>>
Elasticsearch集成HanLP分词器
查看>>
Activate List v3
查看>>
I want to add attachment button on service request
查看>>
心领神会--自动化运维之Ansible的核心概念,安装配置Ansible并学会使用其常见模块。...
查看>>
分布式架构核心RPC原理
查看>>