Spring Data JPA Sorting:如何在视图上建立链接以在升序和降序之间切换?

时间:2015-04-24 14:45:43

标签: sorting spring-mvc jpa spring-data spring-data-jpa

我目前正在努力在我的表格标题中实现一个很好的链接来排序某个列。我希望链接动态确定当前排序值是升序还是降序,然后相应地设置它。目前我只将它设置为Ascending:

<a href="<@spring.url '?page=${page.number+1}&size=${page.size}&sort=title,asc'/>">
Site Name
</a>

我无法弄清楚如何确定当前的排序顺序? 页面对象有一个getSort()方法,它返回一个Sort对象。 Sort对象具有getOrderOf(String Property)方法,该方法应返回排序顺序。但是如何在我的模板中正确实现这个?

理想情况下需要这样的东西:

<a href="<@spring.url '?page=${page.number+1}&size=${page.size}&sort=title,${sortOrder}'/>">
Site Name
</a>

但是很乐意从一个更详细的模式开始:

<#if sortOrder==DESC>
    <a href="<@spring.url '?page=${page.number+1}&size=${page.size}&sort=title,asc'/>">
    Site Name
    </a>
<#else>
    <a href="<@spring.url '?page=${page.number+1}&size=${page.size}&sort=title,desc'/>">
    Site Name
    </a>
</#if>

到目前为止,找不到关于此主题的太多相关信息。只需要一些东西就可以开始了。

谢谢, 勒夫

1 个答案:

答案 0 :(得分:1)

我不确定您使用的是哪种模板语言,但这是如何在JSP / JSTL中执行此操作。

/WEB-INF/tags/statefulQuery.tag

<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ attribute name="name" required="true" type="java.lang.String" %>
<%@ attribute name="value" required="true" type="java.lang.String" %>

<c:url value="">

    <%-- if $name in query then replace its value with $value. copy others --%>
    <c:forEach items="${param}" var="p">
        <c:param name="${p.key}" value="${p.key == name ? value : p.value}"/>
    </c:forEach>

    <%-- if $name is not in query, then add it --%>
    <c:if test="${empty param[name]}">
        <c:param name="${name}" value="${value}"/>
    </c:if>

</c:url>

用法:

<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>

<!-- sort links -->
<a href="<my:statefulQuery name='sort' value='name${page.sort.getOrderFor("name").ascending? ",desc" : "" }' />">Name</a>
<a href="<my:statefulQuery name='sort' value='price${page.sort.getOrderFor("price").ascending? ",desc" : "" }' />">Price</a>


<!-- pager links -->
<a href="<my:statefulQuery name='page' value='${page.previousPageable().pageNumber}'/>">&lsaquo;</a>
<a href="<my:statefulQuery name='page' value='${page.nextPageable().pageNumber}'/>">&rsaquo;</a>