当前位置: 首页 > 面试题库 >

如何在JSP中以几种不同的方式对列表进行排序?

赵佐
2023-03-14
问题内容

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

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

我可以在模型中放置单独的排序后的副本,但是处理显示相同列表的不同方法似乎更像是视图的责任,因此,我希望避免将逻辑放入控制器中。我已经有几个实现Comparator的类来帮助实际排序。

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

我可以在将列表传递到其他forEach标签之前对其进行排序吗?


问题答案:

该SOEL标签维基描述的方式来做到这一点,而无需使用小脚本:使用EL函数来完成排序,然后使用该结果items在JSTL核心属性forEach标签。

函数类:

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;
    }
}

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

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


 类似资料:
  • 问题内容: 说我有两个清单: 如果我运行,它将对其进行排序,但是还有没有一种同步的方法(因此我可以说item属于)?因此,预期输出为: 我的问题是我有一个非常复杂的程序,可以很好地处理列表,但是我有点需要开始引用一些数据。我知道这对字典来说是一个完美的情况,但是我在处理过程中尽量避免使用字典,因为我确实需要对键值进行排序(如果必须使用字典,我知道如何使用它们)。 基本上,该程序的本质是,数据按随机

  • 问题内容: 我有一个列表列表(由于必须动态生成它,所以不能是元组),它的结构为一个int和一个float的列表列表,像这样: 我想对它进行排序,但我只能设法获得内置的排序功能,以便按列表的第一个元素对其进行排序,或者什么也不做,但是我需要按列表的第二个元素对它们进行排序,但是我没有不想实现我自己的排序功能。所以我想要的一个例子是: 有人可以告诉我如何获取内置的排序功能之一来执行此操作吗? 问题答案

  • 问题内容: 我正在尝试这样做: 但这不对…文档模糊不清…您如何在Jinja2中做到这一点? 问题答案: 从2.6版开始,Jinja2的内置排序过滤器允许您指定属性以进行排序: 参见http://jinja.pocoo.org/docs/templates/#sort

  • 问题内容: 在里面 我有一个不同的对象。我试图在条件的基础上搜索相同的列表对象对。如果我找到正确的对,则我将创建一个新对象并将其添加到新列表中。但是我想避免在objectA与objectB配对以及objectB与objectA配对时创建对象对。 直到现在,我还没有找到一种好的方法。 我尝试过的想法 2 for循环 问题:我需要标记已经匹配的对,否则我将避免为同一对创建两个对象。它有效,但可能不是最

  • 问题内容: 用Python的方式对压缩列表进行排序是什么? 代码: 上面的代码显示 [[‘d’,3),(’a’,2),(’t’,1),(’x’,0)] 我想排序 压缩 的价值观。因此,理想情况下,它最终看起来像这样 [[‘x’,0),(’t’,1),(’a’,2),(’d’,3)] 。 问题答案: