Jak napisać logikę paginacji?
Czy ktoś może podać jakiś pomysł/logikę, aby napisać logikę paginacji dla strony wyszukiwania, nad którą pracuję? Informacje, które mam to całkowita liczba stron dla tego wyszukiwania - 10 rekordów na stronę również został wysłany zarówno poprzedni i następny numer strony (nie ma problemu z zapisaniem logiki wszystko, co muszę zrobić, wyciągnąć te informacje i wypełnić. Dostaję również informację, na której stronie Jestem. Mogę wyświetlać tylko 10 stron jak poniżej
<previous 1 |2 |3 | 4| 5 | 6 | 7 | 8 | 9 | 10 next>
Powiedzmy, że całkowita liczba stron wynosi 15 i kiedy użytkownik kliknij Dalej, a następnie Wyświetl w ten sposób
<previous 2 |3 |4 |5 |6 |7 |8 |9 |10 |11 next>
W każdej chwili muszę tylko pokazać 10 stron w paginacji.
#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
3 answers
Oto jak bym to zaimplementował: Ogólnie dobrym pomysłem jest stworzenie klasy filtrów, która filtruje dane i zawiera informacje związane z paginacją. Używam czegoś takiego:
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();
}
}
Możesz mieć specjalne podklasy filtrów (w zależności od tego, co chcesz pobrać) i każda podklasa zaimplementuje to createCountQuery()
i createQuery()
.
Następnie umieścić {[3] } do Velocity
kontekstu i można pobrać wszystkie potrzebne informacje z tego klasy.
Po ustawieniu bieżącej strony kursu pf aktualizujesz wszystkie inne potrzebne informacje(np. currentStartPageNo, currentEndPageNo).
Możesz również mieć metodę refresh()
, aby przywrócić filtr do stanu początkowego.
I oczywiście należy zachować instancję tego samego filtra na sesji(mam na myśli web framework jak Struts, Turbine itp.) podczas gdy użytkownik przechodzi na stronę wyszukiwania, do której należy Filter
.
To jest tylko guideline, pomysł, to nie jest w pełni napisany kod wykonywalny, tylko przykład, aby zacząć w kierunku.
Polecam również wtyczkę jQuery o nazwie jqGrid, która ma obsługę paginacji (chociaż musisz mieć kopię zapasową, aby pobrać dane) i wiele innych fajnych rzeczy.
Można go używać do wyświetlania danych w siatce. Używam go razem z Velocity
bez problemu. Posiada wiele bardzo miłych i przydatnych funkcji, takich jak filtr toolbar, edytowalne komórki, transfer danych w JSON
, XML
itd.
Szczerze mówiąc, Nie wiem, czy ma paginację, jakiej potrzebujesz (używam jej tylko z jedną stroną wyświetlaną w nawigacji i nie możesz kliknąć strony, po prostu użyj przycisków next a prev do nawigacji), ale może mieć wsparcie dla tego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-19 14:05:32
Paginacja po stronie serwera Aby wyświetlić wszystkie dane na jednej stronie, Podziel Na części, aby przyciągnąć uwagę użytkowników. Używam display-tag (aby użyć tego zachowania jednego pola w klasie POJO do obserwowania wszystkich rekordów danych)
<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" %>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-18 08:51:28
Skieruj to istniejące pytanie: paginacja w Javie
Kolejna stronicowanie za pomocą JPanel, zmodyfikuj to zgodnie z Twoim kodem.
Koncepcje paginacji pozostają takie same dla wszystkich języków, a implementacja kodu wymaga niewielkiej modyfikacji opartej na językach.
Zobacz jeszcze jedno istniejące pytanie, aby uzyskać więcej informacji:
Inne strony zewnętrzne Url: -
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:30:50