2013-01-14 42 views
6

मैं अपने जेएसपी पेज में पेजिनेशन को लागू करने की कोशिश कर रहा हूं। मैं स्प्रिंग एमवीसी और हाइबरनेट का उपयोग कर रहा हूं। जावा कोड भाग ठीक है लेकिन मुझे अपने जेएसपी पेज में इसे लागू करने में कठिनाइयों का सामना करना पड़ रहा है। मैं ट्विटर बूटस्ट्रैप का उपयोग कर रहा हूँ।स्प्रिंग एमवीसी और हाइबरनेट एप्लिकेशन में जेएसपी पेज में पेजिनेशन लागू करें

public List<Employee> getEmployees(int page) { 
     return employeeDao.getEmployeeList(page); 
} 
:

@RequestMapping(value = "/list", method = RequestMethod.GET) 
    public String getEmployees(ModelMap model) { 
      **//I believe I should get the page number from the JSP here but how?** 
     model.addAttribute("employees", this.employeeService.getEmployees(page)); 
     return "listing"; 
} 

यह मेरी सेवा वर्ग में संबंधित कोड है:

<div class="container"> 
    <table class="table table-hover"> 
     <th>First Name</th> 
     <th>Last Name</th> 
     <th>Age</th> 
     <c:forEach items="${employees}" var="emp"> 
     <tr> 
      <td>${emp.firstName}</td> 
      <td>${emp.lastName}</td> 
      <td>${emp.Age}</td> 
     </tr> 
     </c:forEach> 
    </table> 

    <div class="pagination"> 
     <ul> 
      <li class="disabled"><a href="#">First</a></li> 
      <li class="disabled"><a href="#">Prev</a></li> 
      <li class="active"><a href="#">1</a></li> 
      <li class="active"><a href="#">2</a></li> 
      <li class="active"><a href="#">3</a></li> 
      <li class="active"><a href="#">4</a></li> 
      <li class="active"><a href="#">5</a></li> 
      <li class="active"><a href="#">Next</a></li> 
      <li class="active"><a href="#">Last</a></li> 
     </ul> 
    </div> 
</div> 

यह मेरा नियंत्रक में संबंधित कोड है:

यहाँ मैं क्या किया है अब तक

यह मेरे डीएओ कक्षा में संबंधित कोड है:

private static final int limitResultsPerPage = 3; 

public List<Employee> getEmployeeList(int page) { 
     Query q = sessionFactory.getCurrentSession().createQuery(
       "from Employee"); 
     q.setFirstResult(page * limitResultsPerPage); 
     q.setMaxResults(limitResultsPerPage); 
     return (List<Employee>) q.list(); 
} 

पृष्ठ जहाँ मुझे लगता है कि तालिका प्रदर्शित कर रहा हूँ list.jsp है

यहाँ मुझे क्या करना चाहिए की मेरी मान्यताओं रहे हैं, लेकिन न जानते हैं कि कैसे (कृपया मुझे सही कर अगर मैं गलत तरीके से ले रहा हूँ):

मेरे लिंक में list.jsp को इंगित करें जो मेरे मेनू में list.jsp? पृष्ठ = 0 पर इंगित करता है, इसलिए जब भी उपयोगकर्ता लिंक पर क्लिक करता है, तो वह पहले पृष्ठ पर पहुंच जाएगा।

जब उपयोगकर्ता बटन में से किसी एक पर क्लिक करता है, तो मुझे पृष्ठ नियंत्रक को मेरे नियंत्रक को पास करना होगा ताकि मैं अपनी क्वेरी के साथ सही "कर्मचारी" वापस कर सकूं।

जैसा कि आप देख सकते हैं, पहले और पिछले बटन निष्क्रिय हैं क्योंकि मैं वर्तमान में पहले पृष्ठ पर हूं। तो मेरा सवाल यह है कि, मैं उन बटनों के सक्रियण/निष्क्रियकरण के साथ-साथ अगली और आखिरी लोगों को कैसे संभालना चाहिए?

इसके अलावा, सूची में संख्याओं को "रीफ्रेश" कैसे करें? उदाहरण के लिए, यदि उपयोगकर्ता पेज 20 पर है, तो मैं 1 से 1 तक बटन प्रदर्शित नहीं करूंगा?

उत्तर

6

कम से कम अपने प्रश्न का उत्तर करने के लिए:

आप इस तरह RequestParam टिप्पणी के साथ अपने नियंत्रक को JSP से पृष्ठ संख्या और अन्य पैरामीटर पारित कर सकते हैं:

@RequestMapping(value = "/list", method = RequestMethod.GET) 
    public String getEmployees(@RequestParam(value = "page", required = false) Long page, ModelMap model) { 
     //now page is available. 
    model.addAttribute("employees", this.employeeService.getEmployees(page)); 
    return "listing"; 
    } 

और अपने लिंक होगा कुछ इस तरह दिखाई:

list/?page=1 

पृष्ठांकन एक काफी जटिल है प्रक्रिया लेकिन यहां कुछ विचार हैं। तर्क को लागू करने के लिए आप जेएसपीएल पर जेएसटीएल का उपयोग कर सकते हैं। उदाहरण के लिए:

<c:if test="${page > 1}"> 
     <li class="active"><a href="#">First</a></li> 
    </c:if> 

मेरा सुझाव है कि आप उन पृष्ठों की संख्या के लिए कार्रवाई में कुछ गणना करते हैं जिन्हें आप प्रदर्शित करना चाहते हैं। उदाहरण के लिए कहें कि आप हमेशा दस लिंक प्रदर्शित करना चाहते हैं। पेज 1 पर, आप पृष्ठ 1 पर प्रदर्शित करेंगे ... 10, पेज 7 पर आप पेज 2 प्रदर्शित करेंगे ... 12 और इसी तरह। कार्रवाई में आप प्रारंभ पृष्ठ और प्रदर्शित पृष्ठ को प्रदर्शित करने के लिए निर्धारित कर सकते हैं।

<c:forEach begin="${startpage}" end="${endpage}" var="p"> 
     <a href="#">${p}</a> 
    </c:forEach> 

और इतने पर:

 int startpage = page - 5 > 0?page - 5:1; 
     int endpage = startpage + 10; 

JSP पेज पर आप एक पाश हो सकता है कर सकते हैं।

+0

धन्यवाद, मैं आपकी सलाह का पालन किया था, कोई समस्या नहीं :) आप क्या जानें कि पहले, पिछला, अगला और अंतिम बटन प्रबंधित करने का सबसे अच्छा अभ्यास क्या है? – dukable

+0

कुछ और विवरण जोड़ने के लिए धन्यवाद विन्सेंट :) अंतिम प्रश्न, मेरे लिंक का नाम, कि मैं $ {पेज} का उपयोग कर वर्तमान पृष्ठ की संख्या बनना चाहता हूं, इसका अर्थ नहीं है, शायद मुझे कुछ याद आ रहा है:

  • ${page}">
  • dukable

    0

    विन्सेंट रामधनी समाधान सही है: इसके लिए धन्यवाद। ड्यूकेबल: मैंने इस कोड का इस्तेमाल विन्सेंट रामधनी के समाधान के आधार पर किया था और यह वास्तव में अच्छी तरह से काम करता है: ऐसा कुछ आपके कोड में काम करना चाहिए।

    @RequestMapping(value = "/list", method = RequestMethod.GET) 
    public String getEmployees(@RequestParam(value = "page", required = false) Long page, ModelMap model) { 
        //now page is available. 
    
        int startpage = (int) (page - 5 > 0?page - 5:1); 
        int endpage = startpage + 10; 
    
        model.addAttribute("employees", this.employeeService.getEmployees(page)); 
    
        model.addAttribute("startpage",startpage); 
        model.addAttribute("endpage",endpage); 
    
        return "listing"; 
    } 
    

    और अपने jsp में:

    <div class="pagination"> 
        <ul> 
         <li><c:forEach begin="${startpage}" end="${endpage}" var="p"><a href="<c:url value="/list" ><c:param name="page" value="${p}"/>${p}</c:url>">${p}</a></c:forEach></li> 
        </ul> 
    </div> 
    

    आप इस रास्ते पर अपने jsp करने के लिए उपयोग कर सकते हैं:

    http://localhost:8080/Project/list/?page=1