Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Displaytag全局顺序正常,但同一页上的顺序相反_Java_Jsp_Displaytag - Fatal编程技术网

Java Displaytag全局顺序正常,但同一页上的顺序相反

Java Displaytag全局顺序正常,但同一页上的顺序相反,java,jsp,displaytag,Java,Jsp,Displaytag,我将dsiplaytag与外部排序和部分列表一起使用。当我使用包含数值(持续时间)的特定列对表进行排序时,整个列表是按顺序排列的(例如降序排列),但在每一页上它是升序排列的。以下是一个例子: Page 1: 31 32 33 Page 2: 28 29 30 Page 3: 25 26 27 而我所期望的是: Page 1: 33 32 31 Page 2: 30 29 28 Page 3: 27 26 25 以下是我的表格声明: <display:table name="operat

我将dsiplaytag与外部排序和部分列表一起使用。当我使用包含数值(持续时间)的特定列对表进行排序时,整个列表是按顺序排列的(例如降序排列),但在每一页上它是升序排列的。以下是一个例子:

Page 1:
31
32
33
Page 2:
28
29
30
Page 3:
25
26
27
而我所期望的是:

Page 1:
33
32
31
Page 2:
30
29
28
Page 3:
27
26
25
以下是我的表格声明:

<display:table name="operations" class="list" requestURI=""
            id="operation" pagesize="${applicationScope.pageSize}" partialList="true" size="listSize" sort="external" cellpadding="${paddingValue}"
            export="true">

更糟糕的是,在我的java代码中,我试图颠倒列表操作的顺序,但无论我以什么顺序发送列表,displaytag似乎都是以相反的顺序显示列表


关于这种行为有什么想法吗?

经过一周多的努力,我找到了解决方案:使用自定义比较器而不是displaytag默认比较器(
org.displaytag.DefaultComparator
):

以下是比较器的代码:

package com.example.model;    

import java.text.Collator;
import java.util.Comparator;

public class CustomComparator implements Comparator
{

    private Collator collator;

    public CustomComparator()
    {
        this(Collator.getInstance());
    }

    public CustomComparator(Collator collatorToUse)
    {
        this.collator = collatorToUse;
        this.collator.setStrength(0);
    }

    public int compare(Object object1, Object object2)
    {
        int returnValue;
        if ((object1 instanceof String) && (object2 instanceof String))
        {
            returnValue = this.collator.compare(object1, object2);
        }
        else
        {
            if ((object1 instanceof Comparable) && (object2 instanceof Comparable))
            {
                returnValue = ((Comparable) object1).compareTo(object2);
            }
            else
            {
                returnValue = this.collator.compare(object1.toString(), object2.toString());
            }
        }
        return -returnValue;
    }

}
与默认比较器的唯一区别是比较方法中的最后一条指令:
-returnValue
而不是
returnValue

然后,在displaytag.properties中告诉displaytag您想使用比较器:

comparator.default=com.example.model.CustomComparator

这就解决了我的问题。

在我看来,这似乎是对该标记库的限制。它不够灵活。我认为这是一个bug,而不是一个限制。你可以在以前的服务器上反转列表。从最后一页开始在我问问题之前我已经做过了。颠倒列表,从最后一页开始,会得到什么结果?