1.Page.java分页数据类
import java.util.List;
public class Page {
@SuppressWarnings("unchecked")
private List pageData;
private int pageNum;
private int totalRecord;
private int totalPageNum;
@SuppressWarnings("unchecked")
public List getPageData() {
return pageData;
}
@SuppressWarnings("unchecked")
public void setPageData(List pageData) {
this.pageData = pageData;
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public int getTotalPageNum() {
return totalPageNum;
}
public void setTotalPageNum(int totalPageNum) {
this.totalPageNum = totalPageNum;
}
}
2.service实现类代码
public Page getPage(NewsSearch newsSearch,int pageNum,int apage,String paixu)throws Exception{
if(newsSearch==null) {
throw new RuntimeException("传递给业务层部门查询条件的对象不能为空!");
}
//组织查询条件
String whereHql = "";
//定义封装查询条件的list
List paramList = new ArrayList();
if(newsSearch.getCondition()!=null && StringUtils.isNotBlank(newsSearch.getType())) {
if ("newsTitle".equals(newsSearch.getType()) || "newsAuthor".equals(newsSearch.getType()) || "newsSource".equals(newsSearch.getType())) {
whereHql = " and o."+newsSearch.getType().trim()+" like ? ";
paramList.add("%" +newsSearch.getCondition().trim() + "%");
}
if ("newsType".equals(newsSearch.getType())) {
whereHql = " and o."+newsSearch.getType().trim()+" = ? ";
paramList.add(newsSearch.getCondition().trim());
}
}
if (newsSearch.getDate1()!=null && newsSearch.getDate2()!=null) {
whereHql+=" and o.newsDate BETWEEN ? AND ?";
paramList.add(newsSearch.getDate1());
paramList.add(newsSearch.getDate2());
}
Object[] params1 = paramList.toArray();
//排序
LinkedHashMap<String, String> orderBy = new LinkedHashMap<String, String>();
orderBy.put("o.newsDate", paixu);
//departmentDao.findObjectByConditionWithNoPage(whereHql, params, orderBy);
//定义一页数据
int num=apage;
//获得带条件的总页数,params1是不带分页条件的查询参数
int totalRecord=this.newsDao.total(whereHql, params1);
int totalPageNum=(totalRecord+(num-1))/num;
int start=(pageNum-1)*num;
int len=num;
if (totalRecord<num) {
len=totalRecord;
}else if (start+len>totalRecord) {
len=totalRecord-start;
}
paramList.add(start);
paramList.add(len);
Object[] params2=paramList.toArray();
//获得带查询条件的查询一页的数据,param2是带分页条件的查询参数
List<News> pageData=newsDao.findObjectByConditionWithPage(whereHql, params2, orderBy);
//List pageData=classDAOImpl.getPageData(cname, start, len);
//封装所需要传到页面的数据
Page page=new Page();
page.setTotalRecord(totalRecord);
page.setPageNum(pageNum);
page.setTotalPageNum(totalPageNum);
page.setPageData(pageData);
return page;
}
3.Action代码
@SuppressWarnings("unchecked")
public String list() throws Exception {
//实例化封装查询条件的javabean
NewsSearch newsSearch = new NewsSearch();
if("newsType".equals(request.getParameter("type"))) {
if(DataType.numMatches(request.getParameter("condition")) ) {
newsSearch.setType(request.getParameter("type"));
newsSearch.setCondition(request.getParameter("condition"));
}else{
return "error";
}
}
newsSearch.setType(request.getParameter("type"));
newsSearch.setCondition(request.getParameter("condition"));
if (StringUtils.isNotBlank(request.getParameter("date1")) && StringUtils.isNotBlank(request.getParameter("date2"))) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
newsSearch.setDate1(sdf.parse(request.getParameter("date1")));
newsSearch.setDate2(sdf.parse(request.getParameter("date2")));
}
String id=request.getParameter("pageNum");
Integer pageNum=1;
if (!"".equals(id) && id != null) {
if(DataType.numMatches(id)) {
pageNum=Integer.parseInt(id);
}else{
return "error";
}
}
Page page=newsService.getPage(newsSearch , pageNum , 5 , "desc");
request.setAttribute("page",page);
request.setAttribute("newsSearch", newsSearch);
return "list";
}
4.jsp分页实现,需要把条件查询的参数带的页面
jQuery代码
$('.page').click(function(){
var $this = $(this);
//要加载的页数
var _page = $this.data('page')|$this.attr('data-page');
//arch form
var form = $('#search-form');
form.attr('action',form.attr('action')+'?pageNum='+_page);
form.submit();
});
查询的form表单
<form method="post" id="search-form" action="${pageContext.request.contextPath}/sys/newsAction_list.do">
<section class="mtb">
<select id="typeSelect" class="select" name="type">
<option>---</option>
<option value="newsTitle" <s:if test="%{#request.newsSearch.type=='newsTitle'}">selected="selected"</s:if>>新闻标题</option>
<option value="newsType" <s:if test="%{#request.newsSearch.type=='newsType'}">selected="selected"</s:if>>新闻类型</option>
<option value="newsSource" <s:if test="%{#request.newsSearch.type=='newsSource'}">selected="selected"</s:if>>新闻来源</option>
<option value="newsAuthor" <s:if test="%{#request.newsSearch.type=='newsAuthor'}">selected="selected"</s:if>>作者</option>
</select>
<s:if test="%{#request.newsSearch.type=='newsType'}">
<select id="textCondition" name="condition" class="select" style="height: 36px; width: 230px;">
<option value="1" <s:if test="%{#request.newsSearch.condition==1}">selected="selected"</s:if>>重要通知</option>
<option value="2" <s:if test="%{#request.newsSearch.condition==2}">selected="selected"</s:if>>会议信息</option>
<option value="3" <s:if test="%{#request.newsSearch.condition==3}">selected="selected"</s:if>>中心动态</option>
<option value="4" <s:if test="%{#request.newsSearch.condition==4}">selected="selected"</s:if>>人才培养</option>
<option value="5" <s:if test="%{#request.newsSearch.condition==5}">selected="selected"</s:if>>学生天地</option>
<option value="6" <s:if test="%{#request.newsSearch.condition==6}">selected="selected"</s:if>>媒体采访</option>
<option value="7" <s:if test="%{#request.newsSearch.condition==7}">selected="selected"</s:if>>发表论文</option>
<option value="8" <s:if test="%{#request.newsSearch.condition==8}">selected="selected"</s:if>>专栏文章</option>
<option value="9" <s:if test="%{#request.newsSearch.condition==9}">selected="selected"</s:if>>图片新闻</option>
</select>
</s:if>
<s:if test="%{#request.newsSearch.type!='newsType'}">
<input type="text" id="textCondition" name="condition" class="textbox textbox_225" placeholder="输入关键字进行查询"/ value="<s:property value="%{#request.newsSearch.condition}"/>">
</s:if>
发表日期:
<span><input readonly type="text" name="date1" class="textbox" value="<s:date name="%{#request.newsSearch.date1}" format="yyyy-MM-dd"/>" id="" οnclick="SelectDate(this,'yyyy-MM-dd')"/></span>
<span>--<input readonly type="text" name="date2" class="textbox" value="<s:date name="%{#request.newsSearch.date2}" format="yyyy-MM-dd" />" id="" οnclick="SelectDate(this,'yyyy-MM-dd')"/></span>
<input type="submit" value="查询" class="group_btn"/>
</section>
</form>
分页代码
<a>共有<s:property value="%{#request.page.totalRecord}"/>条记录</a>
<a>当前第<s:property value="%{#request.page.totalRecord==0 ? 0 : #request.page.pageNum}"/>/<s:property value="%{#request.page.totalPageNum}"/>页</a>
<s:if test="%{#request.page.pageNum > 1 && #request.page.pageNum <= #request.page.totalPageNum }">
<a href="javascript:;" class="page" data-page="<s:property value="%{#request.page.pageNum-1}" />">上一页</a>
</s:if>
<s:if test="%{#request.page.totalPageNum <= 7}">
<s:iterator begin="1" end="%{#request.page.totalPageNum}" var="p">
<s:if test="%{#p==#request.page.pageNum}"> <a style="color:#333;"><s:property value="%{#p}" /></a></s:if>
<s:else>
<a href="javascript:;" class="page" data-page="<s:property value="%{#p}" />"><s:property value="%{#p}" /></a>
</s:else>
</s:iterator>
</s:if>
<s:else>
<s:if test="%{#request.page.pageNum >= 5 && #request.page.pageNum <= #request.page.totalPageNum-3 }">
<s:if test="%{#request.page.pageNum-3 <= 1}" >
<s:iterator begin="1" end="%{#request.page.pageNum-1}" var="p">
<a href="javascript:;" class="page" data-page="<s:property value="%{#p}" />"><s:property value="%{#p}" /></a>
</s:iterator>
</s:if>
<s:if test="%{#request.page.pageNum-3 > 1}" >
<a href="javascript:;" class="page" data-page="1">1</a>
<a>...</a>
<a href="javascript:;" class="page" data-page="<s:property value="%{#request.page.pageNum-2}" />"><s:property value="%{#request.page.pageNum-2}" /></a>
<a href="javascript:;" class="page" data-page="<s:property value="%{#request.page.pageNum-1}" />"><s:property value="%{#request.page.pageNum-1}" /></a>
</s:if>
<a style="color:#333;"><s:property value="%{#request.page.pageNum}" /></a>
<s:if test="%{#request.page.pageNum+3 >= #request.page.totalPageNum}">
<s:iterator begin="%{#request.page.pageNum+1}" end="%{#request.page.totalPageNum}" var="p">
<a href="javascript:;" class="page" data-page="<s:property value="%{#p}" />"><s:property value="%{#p}" /></a>
</s:iterator>
</s:if>
<s:else>
<a href="javascript:;" class="page" data-page="<s:property value="%{#request.page.pageNum+1}" />"><s:property value="%{#request.page.pageNum+1}" /></a>
<a href="javascript:;" class="page" data-page="<s:property value="%{#request.page.pageNum+2}" />"><s:property value="%{#request.page.pageNum+2}" /></a>
<a>...</a>
<a href="javascript:;" class="page" data-page="<s:property value="%{#request.page.totalPageNum}" />"><s:property value="%{#request.page.totalPageNum}" /></a>
</s:else>
</s:if>
<s:elseif test="#request.page.pageNum < 5">
<s:iterator begin="1" end="6" var="p">
<s:if test="%{#p==#request.page.pageNum}"> <a style="color:#333;"><s:property value="%{#p}" /></a></s:if>
<s:else>
<a href="javascript:;" class="page" data-page="<s:property value="%{#p}" />"><s:property value="%{#p}" /></a>
</s:else>
</s:iterator>
<a>...</a>
<a href="javascript:;" class="page" data-page="<s:property value="%{#request.page.totalPageNum}" />"><s:property value="%{#request.page.totalPageNum}" /></a>
</s:elseif>
<s:else>
<a href="${pageContext.request.contextPath}/sys/newsAction_list.do?pageNum=1">1</a>
<a>...</a>
<s:iterator begin="%{#request.page.totalPageNum-5}" end="%{#request.page.totalPageNum}" var="p">
<s:if test="%{#p==#request.page.pageNum}"> <a style="color:#333;"><s:property value="%{#p}" /></a></s:if>
<s:else>
<a class="page" href="javascript:;" data-page="<s:property value="%{#p}" />"><s:property value="%{#p}" /></a>
</s:else>
</s:iterator>
</s:else>
</s:else>
<s:if test="%{#request.page.pageNum >= 1 && #request.page.pageNum < #request.page.totalPageNum }">
<a class="page" href="javascript:;" data-page="<s:property value="%{#request.page.pageNum+1}"/>" >下一页</a>
</s:if>
分页总体效果
一共xx条记录 当前1/10页 1... 3 4 5 6 7...10