gpt4 book ai didi

java - 如何在 JSP 中以多种不同方式对列表进行排序?

转载 作者:太空狗 更新时间:2023-10-29 22:45:39 26 4
gpt4 key购买 nike

我有一个从 Controller 传递到 JSP 的 Player 对象列表,我想在同一页面上以几种不同的方式显示它们:

  • 按名称排序的菜单
  • 按赢/输百分比排序的列表

我可以在模型中放置单独的排序副本,但处理显示相同列表的不同方式似乎更像是 View 的责任,所以我想尽可能避免将逻辑放在 Controller 中。我已经有几个实现 Comparator 的类来帮助进行实际排序。

在 JSP 中执行此操作的最佳方法是什么?

我可以在将列表传递给不同的 forEach 标记之前对列表进行排序吗?

最佳答案

SO EL Tag Wiki描述了一种无需使用 Scriptlet 即可执行此操作的方法:使用 EL 函数进行排序,然后将结果用于 JSTL 核心 forEach 标记中的 items 属性。

函数类:

package org.hierax.ifdl.tags.player;

public final class PlayerSort {
public static List<Player> sortByRank(List<Player> playerList) {
Collections.sort(playerList, new PlayerSortByRank());
return playerList;
}

public static List<Player> sortByAlias(List<Player> playerList) {
Collections.sort(playerList, new PlayerSortByAlias());
return playerList;
}
}

顶级域名:

<?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">

<display-name>Player Functions</display-name>
<tlib-version>1.0</tlib-version>
<short-name>player</short-name>
<uri>org.hierax.ifdl.tags</uri>

<function>
<name>sortByRank</name>
<function-class>org.hierax.ifdl.tags.player.PlayerSort</function-class>
<function-signature>java.util.List sortByRank(java.util.List)</function-signature>
</function>

<function>
<name>sortByAlias</name>
<function-class>org.hierax.ifdl.tags.player.PlayerSort</function-class>
<function-signature>java.util.List sortByAlias(java.util.List)</function-signature>
</function>

</taglib>

菜单 JSP:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="p" uri="/WEB-INF/player.tld" %>

<h1>Players</h1>
<p>
<c:forEach items="${p:sortByAlias(model.players)}" var="player">
<a href="<c:url value="/player/${player.id}"/>" class="menuItem">${player.alias}</a>
</c:forEach>
</p>

关于java - 如何在 JSP 中以多种不同方式对列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6638550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com