2016-11-22 81 views
3

我有一個使用Spring MVC和Spring數據的spring應用程序。我試圖通過在我的控制器方法中使用Pageable和Sort參數來在視圖中啓用分頁和排序。當我按標題或日期排序結果一切正常,第一頁,但是當我瀏覽到下一個頁面的結果是沒有順序了我的mvcContext.xml文件在Spring中如何保持排序順序

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <mvc:annotation-driven> 
     <mvc:argument-resolvers> 
      <bean class="org.springframework.data.web.PageableHandlerMethodArgumentResolver"> 
       <property name="maxPageSize" value="3"/> 
      </bean> 
      <bean class="org.springframework.data.web.SortHandlerMethodArgumentResolver"/> 
     </mvc:argument-resolvers> 
    </mvc:annotation-driven> 
    <context:component-scan base-package="com.its.stud"/> 
    <mvc:resources mapping="/resources/**" location="/resources/"/> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 
</beans> 

和我的JSP文件是

<c:forEach items="${page.content}" var="topic"> 
    <div class="topic-box"> 
     <div class="from-topicbov" > 
      <div class="form-topic-title"> 
       <h1<a href="<spring:url value="/logged?page=0&sort=title"/>">Title</a></h1> 
       <p><a href="<spring:url value="/logged?page=0&sort=date"/>">Date</a></p> 
      </div> 
      <div class="form-row"> 
       <label> 
        <p >${topic.content}</p> 
        <div class="date"> 
         <p><a href="<spring:url value="/logged/${topic.id}"/>">${topic.title}</a></p> 
         <p>${topic.date}</p> 
         <p>${topic.author}</p> 
        </div> 
       </label> 
      </div> 
      <div class="form-row"> 
       <button type="submit" >comment</button> 
      </div> 
     </div> 
    </div> 
    </c:forEach> 

,在我的控制器類我用這個方法:

@RequestMapping("/logged") 
    public String welcome(Model model, Pageable page, Sort sort) { 
     model.addAttribute("page",topicRepository.findAll(page)); 
     return "topics"; 
    } 

請指點。 編輯:存儲庫

public interface TopicRepository extends JpaRepository<Topic,Long> { 
} 
+0

你也許還應該將sort對象傳入存儲庫。 – Vaelyr

+0

我沒有讀過spring-data/data-commons/docs和repository,但沒有發現任何指向我的問題的東西,請你提供一個例子 –

+0

你的'topicRepository',這是什麼樣的存儲庫,你不能從那裏傳遞你的分頁信息到查詢中? – Vaelyr

回答

1

感謝min的同事,我找到了解決方案。爲了維護排序順序,我必須將排序參數傳遞給分頁對象,因此它將保留在其他頁面中。要做到這一點必須採取兩個步驟。首先,在控制器的方法時,必須加入一種參數進行建模的屬性和它必須通過排序屬性

@RequestMapping("/logged") 
public String welcome(Model model, Pageable page, Sort sort) { 
    model.addAttribute("page",topicRepository.findAll(page)); 
    model.addAttribute("sort",(sort !=null)?sort.iterator().next().getProperty():""); 
    return "welcome"; 
} 

,最後在jsp文件,在其中執行所述尋呼,排序參數必須被附加到url

<c:forEach items="${page.content}" var="topic"> 
      <div class="form-topic-title"> 
       <h1><a href="<spring:url value="/logged?page=0&sort=title"/>">Title</a></h1> 
       <p><a href="<spring:url value="/logged?page=0&sort=date"/>">Date</a></p> 
      </div> 
      <div class="form-row"> 
       <label> 
        <p >${topic.content}</p> 
        <div class="date"> 
         <p><a href="<spring:url value="/logged/${topic.id}"/>">${topic.title}</a></p> 
         <p>${topic.date}</p> 
         <p>${topic.author}</p> 
        </div> 
       </label> 
      </div> 
      <div class="form-row"> 
       <button type="submit" >comment</button> 
      </div> 
    </c:forEach> 
    <a href="<spring:url value="/logged?page=${page.number - 1}&sort=${sort}"/>">Previous</a> 
    <a href="<spring:url value="/logged?page=${page.number + 1}&sort=${sort}"/>">Next</a>