任何人都可以提供一些想法/逻辑来为我正在处理的搜索页面编写分页逻辑吗? 我拥有的信息该页面的总页数 - 每页10条记录我也被发送了上一页和下一页的编号(编写逻辑没有问题)所有我需要做的我拉信息和填充。我也得到我所在的信息。我只能显示10页,如下所示
<previous 1 |2 |3 | 4| 5 | 6 | 7 | 8 | 9 | 10 next>
假设总页数是15,当用户点击下一步时,我需要显示如下
<previous 2 |3 |4 |5 |6 |7 |8 |9 |10 |11 next>
在任何时候我只需要在分页中显示10页。
#set($start = 1)
#set($end = $Integer.parseInt($searchTO.getPagination().getNumberofPages()))
#set($range = [$start..$end])
#set($iter = 1)
#foreach($i in $range)
#foreach($link in $searchTO.getPagination().getDirectPageLinks())
#if($i == $iter)
#if ($Integer.parseInt($searchTO.getPagination().getPageNumber())==$iter)
<a class="search_current" href="/?_page=SEARCH&_action=SEARCH$link">$i  |</a>
#else
<a href="/?_page=SEARCH&_action=SEARCH$link">$i  |</a>
#end
#set($iter = 1)
#break
#else
#set($iter=$iter+1)
#end
#end
#end
答案 0 :(得分:10)
以下是我将如何实现它: 通常,最好创建一个Filter类来过滤数据并为您包含与分页相关的信息。我使用这样的东西:
public abstract class Filter{
/** Member identifier for the current page number */
private int currentPageNo;
/** Member identifier for the current start page number in the page navigation */
private int currentStartPageNo;
/** Member identifier for the current end page number in the page navigation */
private int currentEndPageNo;
/** Member identifier for the number of elements on a page */
private int elementsPerPage;
/** Member identifier for the number of pages you have in the navigation (i.e 2 to 11 or 3 to 12 etc.) */
private int pageNumberInNavigation;
public abstract Query createCountQuery();
public abstract Query createQuery();
public void setCurrentPageNo(){
//Your code here
//Validation, variable setup
}
public Long getAllElementsCount(){
//Now this depends on the presistence framework you use, this code is
//just for guidance and has Hibernate-like syntax
Query query = createCountQuery();
List list = query.list();
return !list.isEmpty() && list.get(0) != null ? query.list().get(0) : 0;
}
public List getElements(){
//Now this depends on the presistence framework you use, this code is
//just for guidance and has Hibernate-like syntax
Query query = createQuery();
int from = ((currentPageNo - 1) * elementsPerPage);
query.setFirstResult(from);
query.setMaxResults(elementsPerPage);
//If you use Hibernate, you don't need to worry for null check since if there are no results then an empty collection is returned
return query.list();
}
public List getAllElements(){
Query query = createQuery();
return query.list();
}
public void refresh(){
//Your code here
}
public List next(){
//Move to the next page if exists
setCurrentPageNo(getCurrentPageNo() + 1);
getElements();
}
public List previoius(){
//Move to the previous page if exists
setCurrentPageNo(getCurrentPageNo() - 1);
getElements();
}
}
你可以有特殊的过滤子类(取决于你想要检索的内容),并且每个子类都会实现它createCountQuery()
和createQuery()
。
您可以将Filter
放到Velocity
上下文中,然后就可以从此课程中检索所需的所有信息。
当您设置当前页面时,您将更新所需的所有其他信息(即currentStartPageNo,currentEndPageNo)。
您还可以使用refresh()
方法将过滤器恢复到初始状态。
当然,当用户在Filter
所属的搜索页面上导航时,您应该在会话中保留相同过滤器的实例(我的意思是您的Web框架,如Struts,Turbine等)。 / p>
这只是一个指导方针,一个想法,它不是完全编写的可执行代码,只是一个让你开始朝着一个方向前进的例子。
我还建议你一个名为jqGrid的jQuery插件,它具有分页支持(尽管你必须有一个支持检索数据)和更多很酷的东西。
您可以使用它在网格中显示数据。我和Velocity
一起使用它没有问题。它有很多非常好用的功能,如过滤器工具栏,可编辑单元格,JSON
,XML
等数据传输等。
老实说,我不知道它是否具有您需要的分页(我只使用导航中显示的一个页面,而您无法点击页面只需使用下一个上一个按钮进行导航),但它可能支持这一点。
答案 1 :(得分:2)
服务器端分页 为了在一个页面中显示所有数据,拆分成部分以吸引用户注意。我正在使用display-tag(使用此方法在POJO类中维护一个字段以隐藏所有记录数据)
<form:form commandName="empdto" action="" method="post">
<h2 align="center">Employee List</h2>
<display:table id="row_id" export="false" name="empdto.empList" requestURI="/list.form" pagesize="15" cellpadding="2px;" cellspacing="2px;" > <!-- class="its" -->
<display:column property="id" title="ID" sortable="false" style="border:1;" />
<display:column property="name" title="Name" sortable="true" style="border:1;" /> <!-- sortProperty="name.firstname" -->
<display:column property="age" title="Age" sortable="true" style="border:1;" />
<display:column property="salary" title="Salary" sortable="true" style="border:1;" />
<display:column property="address" title="Address" sortable="true" style="border:1;" /> <!-- style="width:100px" -->
<display:column title="Edit">
<c:set var="clm_id" value="${row_id.id}" />
<a href="${pageContext.request.contextPath}/editemp.form?id=${clm_id}" >Edit</a>
</display:column>
<display:column title="Delete">
<c:set var="clm_id" value="${row_id.id}" />
<a href="${pageContext.request.contextPath}/deleteEmp.form?id=${clm_id}" onclick="selectobjID(${clm_id})">Delete </a>
</display:column>
</display:table>
</form:form>
<%@taglib uri="http://displaytag.sf.net" prefix="display" %>
答案 2 :(得分:1)
请参阅此现有问题: Pagination in Java
使用JPanel的另一个分页,根据您的代码修改它。
分页概念对于所有语言都是相同的,代码实现需要基于语言进行一点修改。
<强> Java Pagination 强>
有关详细信息,请参阅另一个现有问题:
<强> pagination in java? 强>
其他外部网站网址: -