誰かが私が取り組んでいる検索ページのページネーションロジックを書くためのアイデア/ロジックを提供できますか?私が持っている情報は総ページ数その検索のために-1ページあたり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
これが私がそれを実装する方法です:データをフィルタリングし、ページネーション関連の情報を含む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
が属する検索ページをナビゲートしている間、セッションで同じフィルターのインスタンスを保持する必要があります(つまり、Struts、TurbineなどのWebフレームワーク)。
これは単なるガイドラインであり、アイデアであり、完全に記述された実行可能コードではなく、ある方向に進むための単なる例です。
また、ページネーションをサポートする jqGrid というjQueryプラグイン(データを取得するにはバックアップが必要です)と、さらに多くの優れた機能をお勧めします。これを使用して、データをグリッドに表示できます。 Velocity
と一緒に使っても問題ありません。フィルタツールバー、編集可能なセル、JSON
、XML
でのデータ転送など、非常に便利で便利な機能がたくさんあります。正直なところ、必要なページ付けがあるかどうかはわかりません(Iナビゲーションに表示されるページが1つだけで使用し、ページをクリックすることはできません。次の前のボタンを使用してナビゲートするだけです)が、サポートされている場合があります。
サーバー側のページ付けすべてのデータを1ページに表示するには、ユーザーの注意を引くために部分に分割します。私は display-tag を使用しています(これを使用するには、POJOクラスの1つのフィールドを維持して、すべてのレコードデータを監視します)
<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" %>
この既存の質問を参照してください:Javaでのページ付け
JPanelを使用した別のページ付け、コードに従ってこれを変更します。
ページネーションの概念はすべての言語で同じであり、コードの実装には言語に基づいて少し変更を加える必要があります。
詳細については、もう1つの既存の質問を参照してください。
その他の外部サイトのURL:-