如何更改 param 'items'<c:forEach var="entity" items="${p:someSortByTime(someEntities)}">的值以替换排序方式

问题描述

我有这样的代码片段,我想更改排序方式(现在是 sortByTime)但例如我想更改为 sortByTitle 或 sortById 我该怎么做?

使用我对实体进行排序的方法的现有类(为简洁起见省略了一些方法

public final class ListEntitySort {

    private static Comparator<Entity> compareByStartTime = Comparator.comparing(Entity::time);

    public static List<Event> sortByTime(List<Event> events) {
        events.sort(compareByStartTime);
        return events;
    }
... more 
}

对于这种情况,我使用 function.tld

<?xml version="1.0" encoding="UTF-8" ?>
<taglib
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        version="2.1">

    <tlib-version>1.0</tlib-version>
    <short-name>Entity_Functions</short-name>
    <uri>ua.com.example</uri>

    <function>
        <name>sortByTime</name>
        <function-class>ua.com.example.web.command.functions.ListEntitySort</function-class>
        <function-signature>java.util.List sortByTime(java.util.List)</function-signature>
    </function>
  
    <function>
        <name>formatLocalDateTime</name>
        <function-class>ua.com.example.web.command.functions.Dates</function-class>
        <function-signature>java.lang.String formatLocalDateTime(java.time.LocalDateTime,java.lang.String)
        </function-signature>
    </function>

</taglib>

在 serlvet 中获取并设置属性

 List<Entity> entities = someService.getListEntities();
 request.setAttribute("entities",entities);

 <c:forEach var="entity" items="${p:sortByTime(entities)}">
                <tr>
                    <td>${entity.id}</td>
                    <td>${entity.title}</td>
                    <td>${entity.description}</td>
                    <td>${entity.location}</td>
                    <td>${p:formatLocalDateTime(entity.time,'dd-MM-yyyy HH:mm')}</td>
                    <td>
 </tr>

可能会创建一个标志,将排序方法发送到 servlet 并为每个更改排序方法参数。 或者在 jsp 中添加脚本 或者在jsp中通过jstl

用if标签做一些事情

<c:if test="${check the way of sorting }">
put here for each
</c:if>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)