在Jsp或业务逻辑中排序?

Posted

技术标签:

【中文标题】在Jsp或业务逻辑中排序?【英文标题】:Sorting in Jsp or business logic? 【发布时间】:2012-03-28 04:59:58 【问题描述】:

您好,我有一个 Java EE 应用程序,我有一个从供应商表中检索所有供应商的查询。 我还有另一个表格位置,其中有供应商的纬度和经度。

这是应用程序当前所做的事情:

    servlet 从 db 中检索所有供应商的列表 将它们发送到一个jsp页面-suppliers.jsp 显示供应商详细信息及其经纬度。 (使用jstl)

这就是我想做的。

在另一个表中我有我当前的位置。

使用 servlet 中的 Haversine 公式,我想找到我所在位置与所有供应商之间的距离。

我正在考虑将其作为 servlet 中的一种方法来实现。 但我遇到了麻烦:

    如何使供应商位置列表迭代并发送到我的haversine公式方法。

    如何将结果发送到jsp页面。

    如何以排序方式显示它们,最小距离优先。

【问题讨论】:

【参考方案1】:

检查您的基础数据库是否允许您应用半正弦形式(即支持三角公式)作为查询的一部分。排序和过滤由数据库有效地完成。填充表只是将排序列表传递给您的 jstl 的问题。您始终可以使用自定义比较器对列表进行排序。我宁愿使用 jsp 自定义标签来做到这一点。

【讨论】:

【参考方案2】:

请参考以下链接以获取计算距离的公式(以公里或英里为单位) Calculating distance using latitude longitude coordinates in kilometers with Java

1.如何使供应商位置列表迭代并发送到我的haversine公式方法。

地图距离;

 for (Supplier s : supplist) 
               dist.put(s, calcDist(s.getLatitude(), s.getLongitude(), currLat, currLong));
    
    如何将结果发送到jsp页面。 您的应用程序已经按照您的描述执行此操作。

3.如何以排序方式显示它们,最小距离优先。

编写一个自定义比较器以根据距离进行排序。

【讨论】:

【参考方案3】:

2. how to send the result to the jsp page.

您可以在请求的参数中设置您的列表并在客户端获取该参数。之后,您可以在 jsp 中迭代并显示您的数据。

3. how to display them in a sorted way, smallest distance first. 您应该为供应商位置编写比较器。您可以通过它对列表进行排序。例如,

    Comparator<Supplier> comp = new Comparator<Supplier>()

        @Override
        public int compare(Supplier o1, Supplier o2) 
            // your logic
            return 0;
        
    ;

Collections.sort(your supplier location list, comp);

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Comparator.html

【讨论】:

第二部分很好,我通过后参数得到了它。第三部分-请您详细说明或给我发送一个教程链接。这真的很有帮助。【参考方案4】:

您可以在您的 Supplier 类中放置 2 种方法,一种用于通过提供坐标来设置距离,另一种用于检索它;类似:

void setDistance(long latitude, long longitude) 
    // calcultate distance and set it
    //...
    this.distance = distance;


long getDistance() 
    return this.distance;

然后在检索到您的供应商后,您可以使用比较器对其进行排序;类似:

Collections.sort(suppliers, new Comparator<Supplier>()
    public int compare(Supplier o1, Supplier o2) 
        return new Long(o1.getDistance()).compare(o2.getDistance());
    
);

我还没有编译这段代码;所以它可能包含一些语法错误,但它会完成这项工作。您甚至可以创建一个类似 Comparator_distance 的类,而不是匿名类,您可以在其中设置坐标以计算距离,因此您不必在供应商中设置距离,而是可以在比较时计算它。这对我来说感觉有点干净。

如果您想要分页的结果,请确保在分页之前进行排序,否则您会得到不正确的结果。

【讨论】:

以上是关于在Jsp或业务逻辑中排序?的主要内容,如果未能解决你的问题,请参考以下文章

Servlet处理业务逻辑,JSP处理视图渲染,Servlet处理请求后,把输出的结果转到JSP页面的解决方法

java中的Model1和Model2有啥区别

C 语言二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 抽象业务逻辑函数 )

Jsp+Servlet+JavaBean经典MVC模式理解

在哪里放置业务逻辑,在控制器或服务中? [复制]

使用分层实现业务处理