在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页面的解决方法