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

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

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

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

这就是我想做的。

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

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

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

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

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

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

【问题讨论】:

    标签: java database jsp jakarta-ee servlets


    【解决方案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));
          }
      
      1. 如何将结果发送到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 的类,而不是匿名类,您可以在其中设置坐标以计算距离,因此您不必在供应商中设置距离,而是可以在比较时计算它。这对我来说感觉有点干净。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-31
          • 2012-05-26
          • 2010-12-14
          • 2015-11-10
          • 1970-01-01
          • 2011-08-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多