如何在Spring

时间:2016-11-22 13:45:46

标签: java spring spring-mvc spring-data

我有一个使用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> {
}

2 个答案:

答案 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";
}