2011-10-19 8 views
6

Có ai có thể cung cấp một số ý tưởng/logic để viết logic phân trang cho trang tìm kiếm mà tôi đang làm việc không? Thông tin tôi có là tổng số trang cho tìm kiếm đó 10 bản ghi trên mỗi trang tôi cũng được gửi cả số trang trước và trang tiếp theo (không có vấn đề viết logic tất cả những gì tôi cần làm) và cư. tôi cũng nhận được các thông tin mà trang tôi vào. tôi chỉ có thể hiển thị 10 trang như dưới đâyCách viết logic phân trang?

<previous 1 |2 |3 | 4| 5 | 6 | 7 | 8 | 9 | 10 next> 

Say nếu tổng số trang là 15 và khi người dùng nhấp chuột tiếp theo sau đó tôi cần phải hiển thị như

này
<previous 2 |3 |4 |5 |6 |7 |8 |9 |10 |11 next> 

Bất cứ lúc nào tôi chỉ cần để hiển thị 10 trang trong phân trang.

#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 &nbsp|</a> 
         #else 
          <a href="/?_page=SEARCH&_action=SEARCH$link">$i &nbsp|</a> 
         #end 
         #set($iter = 1) 
         #break 
        #else 
         #set($iter=$iter+1) 
        #end 

       #end 

      #end 
+0

Tôi đã làm điều này trước đây. Nó sẽ giúp để xem mã của bạn mặc dù ... – Alex

+0

Cách nó được mã hóa ngay bây giờ là $ searchTO.getPagination() getDirectPageLinks() nhận được tất cả các liên kết đến các trang. nếu tôi có 50 trang thì nó hiển thị tất cả – pushya

+0

Bạn đang sử dụng khung công tác kiên trì nào? – Atticus

Trả lời

9

Sau đây là cách tôi sẽ thực hiện nó: Nó thường là một ý tưởng tốt để tạo ra một lớp lọc để lọc dữ liệu và chứa thông tin liên quan pagination cho bạn. Tôi sử dụng một cái gì đó như thế này:

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(); 
    } 

} 

Bạn có thể có các lớp con đặc biệt của bộ lọc (tùy thuộc vào những gì bạn muốn lấy) và và mỗi lớp sẽ thực hiện nó là createCountQuery()createQuery().

Bạn sẽ đặt Filter vào ngữ cảnh Velocity và bạn có thể truy xuất tất cả thông tin bạn cần từ lớp này.

Khi bạn đặt khóa trang hiện tại, bạn cập nhật tất cả thông tin khác mà bạn cần (tức là currentStartPageNo, currentEndPageNo).

Bạn cũng có thể có phương thức refresh() để đặt bộ lọc trở về trạng thái ban đầu.

Và tất nhiên bạn nên giữ trường hợp của cùng một bộ lọc trong phiên (tôi có nghĩa là khung web của bạn như Struts, Turbine, v.v.) trong khi người dùng điều hướng trên trang tìm kiếm mà thuộc tính Filter.

Đây chỉ là một hướng dẫn, một ý tưởng, nó không phải là mã thực thi hoàn toàn bằng văn bản, chỉ là một ví dụ để giúp bạn bắt đầu theo một hướng.

Tôi cũng sẽ giới thiệu cho bạn một plugin jQuery có tên là jqGrid có hỗ trợ phân trang (mặc dù bạn phải có một bản sao lưu để truy xuất dữ liệu) và nhiều thứ thú vị hơn. Bạn có thể sử dụng nó để hiển thị dữ liệu của bạn trong một mạng lưới. Tôi sử dụng nó cùng với Velocity mà không có vấn đề gì. Nó có rất nhiều tính năng rất đẹp và hữu ích như thanh công cụ lọc, các ô có thể chỉnh sửa, chuyển dữ liệu trong JSON, XML vv. Thành thật mà nói, tôi không biết liệu nó có phân trang như bạn cần hay không (tôi sử dụng nó chỉ với một trang được hiển thị trong điều hướng và bạn không thể bấm vào một trang chỉ cần sử dụng một nút prev kế tiếp để điều hướng), nhưng nó có thể có hỗ trợ cho điều đó.

1

Tham khảo này câu hỏi hiện có: Pagination in Java

Một pagination sử dụng JPanel, sửa đổi này theo mã của bạn.

Khái niệm phân trang vẫn giữ nguyên cho tất cả ngôn ngữ và triển khai mã yêu cầu sửa đổi chút ít dựa trên ngôn ngữ.

Java Pagination

Tham khảo thêm một câu hỏi hiện tại cho biết thêm:

pagination in java?

URL trang web bên ngoài khác: -

2

Phân trang bên máy chủĐể hiển thị tất cả dữ liệu trong một trang, Chia thành các phần để thu hút sự chú ý của người dùng. Tôi đang sử dụng display-tag (Để sử dụng này duy trì một lĩnh vực trong lớp POJO nhìn chằm chằm tất cả dữ liệu hồ sơ)

<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" %>