在Jsp或业务逻辑中排序?

时间:2012-03-28 04:59:59

标签: java database jsp java-ee servlets

您好我有一个Java EE应用程序,我有一个查询,它从供应商表中检索所有供应商。 我有另一张桌子位置,我有供应商的经纬度。

以下是该应用程序目前的工作:

  1. servlet从db
  2. 中检索所有供应商的列表
  3. 将它们发送到jsp page- suppliers.jsp
  4. 显示供应商详细信息及其经度和纬度。 (使用jstl)
  5. 这是我想要做的。

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

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

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

    1. 如何使供应商位置列表重复并发送到我的半正式公式方法。

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

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

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

检查您的基础数据库是否允许您应用hasrsine表单(即支持三角公式)作为查询的一部分。数据库有效地完成排序和过滤。填充表只是将排序列表传递给jstl。您始终可以使用自定义比较器对列表进行排序。我宁愿使用jsp custom tag。

答案 2 :(得分:0)

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

1.如何使供应商位置列表重复并发送到我的半正式公式方法。

Map dist;

 for (Supplier s : supplist) {
               dist.put(s, calcDist(s.getLatitude(), s.getLongitude(), currLat, currLong));
    }
  1. 如何将结果发送到jsp页面。 您的应用程序已根据您的描述执行此操作。
  2. 3.如何以排序的方式显示它们,首先显示最小距离。

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

答案 3 :(得分:0)

您可以在供应商类中放置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的类来代替匿名类,您可以在其中设置coördinates来计算距离,因此您不必在供应商中设置距离,但可以在比较时计算它。对我来说感觉有点干净。

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