jsp自定义图文新闻列表标签结合ssh2,带分页功能
jsp自定义图文新闻列表标签结合ssh2,带分页功能(欢迎大家讨论指点,共同进步)
1.service层 (模拟返回数据)
package com.mingda.service.impl; import java.io.Serializable; import java.util.Date; import java.util.LinkedList; import java.util.List; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.mingda.dao.NewsDao; import com.mingda.entity.News; import com.mingda.service.NewsService; import com.mingda.util.Pager; @Service(value = "newsService") public class NewsServiceImpl implements NewsService { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(NewsServiceImpl.class); private NewsDao newsDao; public NewsDao getNewsDao() { return newsDao; } @Autowired public void setNewsDao(NewsDao newsDao) { this.newsDao = newsDao; } @Override public Pager<News> listNewsByPager(Pager<News> pager) { logger.info("查看新闻分页列表!"); // ==========模拟数据(返回数据总记录数)=============== int recordCount = 21; pager.setRecordCount(recordCount); // ==========模拟数据(返回数据总记录数)=============== // ==========模拟数据(返回当前页数据)=============== int pageNo = pager.getPageNo(); int pageSize = pager.getPageSize(); // 总页数 int pageCount = (recordCount + pageSize - 1) / pageSize; // 页号越界处理 if (pageNo > pageCount) { pager.setPageNo(pageCount); } if (pageNo < 1) { pager.setPageNo(1); } pageNo = pager.getPageNo(); List<News> newses = new LinkedList<News>(); for (int i = (pageNo - 1) * pageSize; i < pageNo * pageSize; i++) { News news = new News(); news.setId("" + i); news.setTitle("明大企业集团XXXX" + i); news.setContent("明大企业集团战略发展XXXXX" + i); news.setHref("news/00" + (i + 1)); news.setPicUrl("http://y3.ifengimg.com/f04c9b92453d105f/2012/1119/xes_ebec5c179251f3e4f86c56529482f995.jpg"); news.setCreateTime(new Date()); newses.add(news); } // ===========模拟数据(返回当前页数据)======================== pager.setList(newses); return pager; } }
2.Action层(接收参数,并转发)
1 package com.mingda.action; 2 3 import java.util.Date; 4 import java.util.List; 5 import java.util.UUID; 6 7 import org.apache.struts2.convention.annotation.Action; 8 import org.apache.struts2.convention.annotation.Namespace; 9 import org.apache.struts2.convention.annotation.ParentPackage; 10 import org.apache.struts2.convention.annotation.Result; 11 import org.springframework.beans.factory.annotation.Autowired; 12 13 import com.mingda.entity.News; 14 import com.mingda.service.NewsService; 15 16 @ParentPackage("struts-default") 17 @Namespace("/") 18 public class NewsAction { 19 private NewsService newsService; 20 private List<News> newses; 21 private int pageNo; 22 23 public List<News> getNewses() { 24 return newses; 25 } 26 27 public NewsService getNewsService() { 28 return newsService; 29 } 30 31 public int getPageNo() { 32 return pageNo; 33 } 34 35 36 37 @Action(value = "listNewsByPager", results = { @Result(name = "success", location = "/news/index.jsp") }) 38 public String listNewsByPager() { 39 40 return "success"; 41 } 42 43 public void setNewses(List<News> newses) { 44 this.newses = newses; 45 } 46 47 @Autowired 48 public void setNewsService(NewsService newsService) { 49 this.newsService = newsService; 50 } 51 52 public void setPageNo(int pageNo) { 53 this.pageNo = pageNo; 54 } 55 56 }
3.WEB-INF下hao.tld文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> 3 <description>自定义标签集合(QQ:1176069533)</description> 4 <tlib-version>1.0</tlib-version> 5 <short-name>hao</short-name> 6 <uri>/hao-tags</uri> 7 8 <!-- 输出分页新闻列表标签 --> 9 <tag> 10 <description>输出分页新闻列表标签</description> 11 <name>listNewsByPager</name> 12 <tag-class>com.mingda.tag.ListNewsByPagerTag</tag-class> 13 <body-content>scriptless</body-content> 14 <attribute> 15 <name>pageSize</name> 16 <required>true</required> 17 <rtexprvalue>true</rtexprvalue> 18 </attribute> 19 <attribute> 20 <name>pageNo</name> 21 <required>true</required> 22 <rtexprvalue>true</rtexprvalue> 23 </attribute> 24 <attribute> 25 <name>url</name> 26 <required>true</required> 27 <rtexprvalue>true</rtexprvalue> 28 <type>java.lang.String</type> 29 </attribute> 30 </tag> 31 </taglib>
4.界面层引用界面(/news/index.jsp)
1 <%@ page language="java" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 3 <%@taglib prefix="hao" uri="/hao-tags"%> 4 <!DOCTYPE html> 5 <html> 6 <head> 7 <base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/"> 8 <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> 9 <meta content="IE=EmulateIE7" http-equiv="X-UA-Compatible"> 10 <title>明大企业集团</title> 11 <%@ include file="../include/include2.jsp"%> 12 </head> 13 <body> 14 <%@ include file="../include/header.jsp"%> 15 16 <div class="main"> 17 <div class="bannerWrap"></div> 18 <div class="pagewidth"> 19 <div class="positon"> 20 当前位置:<a href="index.jsp" class="postion">首页</a> > <a href="news/index.jsp" class="postion">新闻中心</a> > <a href="news/index.jsp" class="postion">集团新闻</a> 21 </div> 22 </div> 23 <div class="mainWrap pagewidth clearself"> 24 <div class="left fl"> 25 <div class="showgood"> 26 <h2>集团新闻</h2> 27 <hao:listNewsByPager pageNo="${pageNo}" pageSize="3" url="/listNewsByPager"></hao:listNewsByPager> 28 </div> 29 </div> 30 <%@ include file="../include/right.jsp"%> 31 32 </div> 33 </div> 34 35 <%@ include file="../include/footer.jsp"%> 36 </body> 37 </html>
5.分页参数Pager类
1 package com.mingda.util; 2 3 import java.util.LinkedList; 4 import java.util.List; 5 6 public class Pager<T> { 7 // 每页显示记录数(默认10) 8 private int pageSize = 10; 9 // 页号(默认1) 10 private int pageNo = 1; 11 // 总记录数(默认0) 12 private int recordCount = 0; 13 // 当前页记录集合 14 private List<T> list = new LinkedList<T>(); 15 public int getPageSize() { 16 return pageSize; 17 } 18 public void setPageSize(int pageSize) { 19 this.pageSize = pageSize; 20 } 21 public int getPageNo() { 22 return pageNo; 23 } 24 public void setPageNo(int pageNo) { 25 this.pageNo = pageNo; 26 } 27 public int getRecordCount() { 28 return recordCount; 29 } 30 public void setRecordCount(int recordCount) { 31 this.recordCount = recordCount; 32 } 33 public List<T> getList() { 34 return list; 35 } 36 public void setList(List<T> list) { 37 this.list = list; 38 } 39 }
6.效果
7.点击切换效果
8.分页栏总结:
a.总页数计算公式:
总页数=(总记录数+每页显示记录数-1)/ 每页显示记录数
b.分页栏状态信息:
总页数大于一条件下,总页数小于一特殊处理 |
第一页(1) |
上一页(当前页-1) |
下一页(当前页+1) |
最末页(总页数) |
当前页=1 |
不 |
不 |
可 |
可 |
1<当前页<总页数 |
可 |
可 |
可 |
可 |
当前页=总页数 |
可 |
可 |
不 |
不 |
c.分页栏状态跳转信息:
跳转页号<1 |
跳转第一页 |
跳转页号>总页数 |
跳转最后一页 |
9.整体处理流程图: