采用c标签javaweb服务端实现分页的写法

如何实现如下分页
分页组件 用的是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说明当前位置为高光显示的位置
  1. 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;
	}

}

  1. 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));
	}
}

  1. amazesearch.html
							<!--分页 --> 
							<ul class="am-pagination am-pagination-right">
								<li ><a  href="moreproject.action?nowpage=1&prjectflag=${prjectflag}">&laquo;</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}">&raquo;</a></li>
							</ul>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值