Сортировка в JSP или бизнес логика? - PullRequest
0 голосов
/ 28 марта 2012

Здравствуйте, у меня есть приложение Java EE, у меня есть запрос, который извлекает всех поставщиков из таблицы поставщиков.И у меня есть еще одна таблица Location, где у меня есть широта и долгота поставщиков.

Вот что приложение в настоящее время делает:

  1. сервлет получает список всех поставщиков изdb
  2. отправляет их на страницу jsp- supplier.jsp
  3. , в которой отображаются сведения о поставщиках, их долгота и широта.(используя jstl)

Вот что я хочу сделать.

В другой таблице у меня есть текущее местоположение.

Использование формулы Haversine в сервлете Iхочу найти расстояние между моим местоположением и всеми поставщиками.

Я думаю о реализации этого как метода в сервлете.но у меня возникли проблемы:

  1. как сделать список местоположений поставщиков повторяющимся и отправить в мой метод формулы haversine.

  2. какотправьте результат на страницу jsp.

  3. как отобразить их отсортированным способом, сначала наименьшее расстояние.

Ответы [ 4 ]

0 голосов
/ 28 марта 2012

вы можете поместить 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, в котором вы можете установить координаты для вычисления расстояния от вас, поэтому вам не нужно устанавливать расстояние в поставщиках, но вы можете вычислить его при сравнении.Это кажется мне чище.

Если вы хотите разбить на страницы результаты, просто разберитесь, прежде чем разбивать на страницы, иначе вы получите неправильные результаты.

0 голосов
/ 28 марта 2012

Проверьте, позволяет ли ваша базовая база данных применять форму haversine (т.е. поддерживает тригонометрические формулы) как часть запроса.Сортировка и фильтрация производятся по базе данных.Заполнение таблицы - это просто передача отсортированного списка в ваш jstl.Вы всегда можете отсортировать список с помощью пользовательского компаратора.Я бы предпочел сделать это, используя пользовательский тег jsp.

0 голосов
/ 28 марта 2012

Плз, перейдите по следующей ссылке, чтобы получить формулу для расчета расстояния (в км или милях) Расчет расстояния с использованием координат широты и долготы в километрах с использованием Java

1. Как сделать список местоположений поставщиков повторяющимся и отправить в мой метод формулы haversine.

Карта местности;

 for (Supplier s : supplist) {
               dist.put(s, calcDist(s.getLatitude(), s.getLongitude(), currLat, currLong));
    }
  1. как отправить результат на страницу jsp. Уже ваше приложение делает это согласно вашему описанию.

3. Как отобразить их отсортированным способом, сначала наименьшее расстояние.

Создать собственный компаратор для сортировки по расстоянию.

0 голосов
/ 28 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...