2016-11-22 75 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>