如何实现如下分页
用的是amazeui
假设总页数为6,<ul>标签中<li>的固定个数为5个,那么问题是:
1、如何实现从页码为3开始进行偏移为2的处理,也就是当点击第4页时,第2页成为第1个<li>显示的元素,就变成了2,3,4,5,6
2、如何确定高光显示位置
思路:
1、定义nowpage参【当前页码】,length为<li>长度为5,如果nowpage>=Math.floor(lenth/2)+1进行Long start=(long) (nowpage-Math.floor(lenth/2)); start参为当前起始页
2、已知当前start起始页,求出当前展示的最后一个页码为多少,首先总页数已知为6那么Long end = start+(length-1)>=6 如果end大于6那么end = 6
判断当前<li>的显示长度是否为5
if(end-start<lenth-1&&start!=1){//必须加start!=1否则会出现负数
start = end-lenth+1;
}
3、高光的显示肯定是根据c标签的varStatus="status"获取角标的值status.index如果status.index等于nowpage-start说明当前位置为高光显示的位置
- MoreprojectAction 实现页面跳转和数据获取分页的接口
package com.coconut.appzgc.cms.main;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import com.coconut.api.CCUtils;
import com.coconut.api.ICCDao;
import com.coconut.appzgc.entity.project.ChinaInterestEntity;
import com.coconut.appzgc.entity.project.ProjectFileRelation;
import com.coconut.appzgc.entity.project.ProjectIntroEntity;
import com.coconut.appzgc.entity.system.SystemFileEntity;
import com.coconut.lang.control.impl.DefaultControl;
import com.coconut.utils.Pagination;
import com.coconut.utils.SystemUtils;
public class MoreprojectAction extends DefaultControl {
/**
*
*/
public static final long serialVersionUID = -403443286411241708L;
@Resource
SystemUtils utils;
public String getWeb(){
return utils.gotBaseUrl();
}
String querWords;
public void setQuerWords(String querWords) {
this.querWords = querWords;
}
Long nowpage = 1L;
Long pagesize = 5L;
public Long getNowpage() {
return nowpage;
}
PageVo page;
public PageVo getPage() {
return page ;
}
public Long getPagesize() {
return pagesize;
}
public void setNowpage(Long nowpage) {
this.nowpage = nowpage;
}
public void setPagesize(Long pagesize) {
this.pagesize = pagesize;
}
List<ProjectIntroEntity> prolist;
public int getSize(){
if(prolist==null)return 0;
else return prolist.size();
}
public List<ProjectIntroEntity> getProlist() {
return prolist;
}
public void setProlist(List<ProjectIntroEntity> prolist) {
this.prolist = prolist;
}
public String getQuerWords() {
return querWords;
}
Pagination<ProjectIntroEntity> pg;
@Action(results = { @Result(name = SUCCESS, location="/WEB-INF/src/appzgc/view_/cms/main/amazesearch.html") } )
public String execute() throws Exception {
try {
pg = new Pagination<ProjectIntroEntity>();
pg.setNowpage(nowpage);//页面传过来的页码
pg.setPagesize(pagesize);//当前每页显示
prolist = service.service1(pg,querWords); //数据库查询到的list
page=new PageVo(pg);
} catch (Exception e) {
result.error(e.getMessage());
}
return SUCCESS;
}
@Resource(name=MoreprojectAction.serialVersionUID+"")
MoreprojectActionService service;
}
@Component(MoreprojectAction.serialVersionUID+"")
class MoreprojectActionService {
@Resource(name=CCUtils.SESSIONFACTORY_DEFAULT)
SessionFactory sessionFactory;
@Transactional
public List<ProjectIntroEntity> service1(Pagination<ProjectIntroEntity> pg, String key) throws Exception{
ICCDao<ProjectIntroEntity , String> dao= (ICCDao<ProjectIntroEntity, String>)
CCUtils.getDao(sessionFactory, ProjectIntroEntity.class);
ICCDao<ProjectFileRelation , String> dao1= (ICCDao<ProjectFileRelation, String>)
CCUtils.getDao(sessionFactory, ProjectFileRelation.class);
String hql = "select s from ChinaInterestEntity v ,ProjectIntroEntity s where v.interestedOrNot =:interestedOrNot and s.projectId = v.projectId and s.deleteLogic =:deleteLogic ";
Map mp1 = new HashMap();
mp1.put("interestedOrNot", ChinaInterestEntity.interestedOrNot_yes);
mp1.put("deleteLogic", ProjectIntroEntity.DELETE_LOGIC_NO);
if(StringUtils.isNotBlank(key)){
hql+=" and s.projectName like :projectName ";
mp1.put("projectName", "%"+key+"%");
}
hql+=" order by s.createDate desc ";
List<ProjectIntroEntity> ls = dao.findByHql(hql.toString(),mp1,pg);
if(ls!=null&&ls.size()>0){
for(ProjectIntroEntity pEn:ls){
String hql2 = " from ProjectFileRelation t where t.relation =:relation";
Map mp = new HashMap();
mp.put("relation", pEn.getTableId());
List<ProjectFileRelation> filesShow = dao1.findByHql(hql2.toString(),mp);
pEn.setFilesShow(filesShow);
String str=pEn.getBusinessModelShow();
if(str!=null && str.length()>120){
pEn.setBusinessModelShow(str.substring(0,220)+"......");
}
}
}
return ls ==null?new ArrayList<ProjectIntroEntity>():ls;
}
}
- PageVo用于提供页面c标签分页用的
package com.coconut.appzgc.cms.main;
import java.util.ArrayList;
import java.util.List;
import com.coconut.appzgc.entity.project.ProjectIntroEntity;
import com.coconut.utils.Pagination;
public class PageVo {
static final int lenth=5; //设置分页li的长度
List<Long> names=new ArrayList<Long>();
Long nowpage;
Long pagesize;
Long total;
Long start;
Long totalpage;
public PageVo(Pagination<ProjectIntroEntity> pg) {
super();//假设totalSize为120
this.nowpage = pg.getNowpage();
this.pagesize = pg.getPagesize();
start=1L;
if(nowpage>=Math.floor(lenth/2)+1){ //从页码3开始偏移长度,偏移量为2 1> 如果页码为3
start=(long) (nowpage-Math.floor(lenth/2)); // 2> 起始位置为1
}
Long end=start+lenth-1; //3>结束5
total=pg.getCountrecord();
totalpage=(total/pagesize)+((total%10)>0?1:0);//4>总页码为12
if(end>totalpage){
end=totalpage;
if(start+lenth>end&& start!=1){
start=end-lenth+1;
}
}
long i=start;
while(i<=end){
names.add(i);
i++;
}
}
public Long getTotalpage() {
return totalpage;
}
public Long getStart() {
return start;
}
public Long getTotal() {
return total;
}
public List<Long> getNames() {
return names;
}
public Long getNowpage() {
return nowpage;
}
public Long getPagesize() {
return pagesize;
}
public static void main(String[] args) {
System.out.println(Math.floor(3.5));
}
}
- amazesearch.html
<!--分页 -->
<ul class="am-pagination am-pagination-right">
<li ><a href="moreproject.action?nowpage=1&prjectflag=${prjectflag}">«</a></li>
<c:forEach var="item" items="${page.names}" varStatus="status">
<li class=" <c:if test="${status.index==page.nowpage-page.start}">am-active</c:if>"><a href="moreproject.action?nowpage=${item}&prjectflag=${prjectflag}">${item}</a></li>
</c:forEach>
<li><a href="moreproject.action?nowpage=${page.totalpage}&prjectflag=${prjectflag}">»</a></li>
</ul>