我有一个使用Spring MVC和Spring数据的spring应用程序。我试图通过在我的控制器方法中使用Pageable和Sort参数在视图中启用分页和排序。当我按标题或日期对结果进行排序时,第一页的所有内容都能正常工作,但当我导航到下一页时,我的mvcContext.xml
文件不再被排序了
<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 :(得分:1)
感谢min的同事,我确实找到了解决方案。为了维护排序顺序,我必须将sort参数传递给分页对象,因此它将保留在其他页面中。为此,必须采取两个步骤。首先,在控制器方法中,必须将sort参数添加到model属性,并且必须传递sort属性
@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文件中,sort参数必须附加到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>
答案 1 :(得分:0)
您甚至可以删除Sort参数,因为Pageable接口已经有了它。 因此控制器可以是:
@RequestMapping("/logged")
public String welcome(Model model, Pageable page) {
model.addAttribute("page",topicRepository.findAll(page));
Sort sort = page.getSort();
model.addAttribute("sort",(sort !=null)?sort.iterator().next().getProperty():"");
return "welcome";
}