Сортируемая таблица HTML в Java - PullRequest
0 голосов
/ 19 ноября 2011

Я хочу добавить сортировку в таблицу HTML, заполненную Hibernate.Фактическая сортировка должна выполняться базой данных.Чтобы передать условие «Сортировать по» в базу данных, Java должна сопоставить переданные параметры сортировки со столбцом в запросе.Я не уверен, как реализовать это соответствие.

Я мог бы передать что-то вроде «Employee.salary», но тогда это условие необходимо проверить, как и все параметры, переданные от клиента.Эта проверка потребует получения имени столбца из аннотаций Hibernate, и это не так просто, я думаю.Кроме того, столбец может быть специфичным для запроса и не соответствовать полю таблицы.

Другой способ заключается в использовании жестко закодированных значений в уровне представления.Но это свяжет уровень представления с уровнем персистентности, что, я думаю, тоже нехорошо.

Как вы работаете с серверной сортировкой в ​​веб-приложениях?

Ответы [ 3 ]

3 голосов
/ 19 ноября 2011

Вы должны создать какой-то промежуточный слой, который отображает имена столбцов между представлением и таблицами.Таким образом, вы можете отправлять дополнительные параметры для вашего запроса в инкапсулированной форме, а в коде на стороне сервера вы можете использовать их в соответствии с вашим фактическим запросом.Для сортировки выполните следующее:

public class ColumnMapping {
    String tableColName;
    String dbColName;
    //getters, setters, ctors and anything else required
}
List<ColumnMapping > orderColumns = new ArrayList<ColumnMapping >();
orderColumns.add(new ColumnMapping("foo", "bar"));

//... server side
StringBuilder queryString = new StringBuilder("select * from books ");
if(orderingApplicable) {
   queryString.appendd("order by ");
   queryString.append(implode(orderColumns, ", "));
}

Где implode - теоретическая функция, склеивающая элементы списка запятыми в строку.Примечания:Вы можете легко заполнить отображение view-db при запуске, если оно неизменяемое.То же самое можно сделать для группы.Это просто заглушка, но расширяемая, чтобы включить агрегатные функции или все, что вам нужно

1 голос
/ 23 ноября 2011

Если у меня есть сущность Employee, то я хочу EmployeeRepository, который позволяет мне findEmployeesBySalary(SortType sortType, int skip, int limit)

Со стороны веб-службы я хочу URI, такой как

foo.com/employees?by=salary&skip=10&limit=50

который возвращает что-то вроде (как вызов AJAX XHR)

<employees>
    <employee uri="/employee/1" />
    <employee uri="/employee/2" />
    <employee uri="/employee/3" />
</employees>

или полноценную HTML-страницу, отображаемую соответствующим образом.

Это удобно позволяет кэшировать сотрудников на стороне клиента (чторазмер кэша является гибким) и на уровне HTTP.

Обратите внимание, что имена столбцов?Ненужные.У вас будет HiberateEmployeeRepository, который реализует интерфейс EmployeeRepository по мере необходимости.Выразите это как методы и используйте сложные параметры, если вам нужно.

Вы можете даже иметь два отдельных метода, если хотите, вместо перечисления, findHighestPaidEmployees и findLowestPaidEmployees - foo.com/employees?salary=lowest&skip=10&take=30.это ужасно удручающий URI.

0 голосов
/ 19 ноября 2011

Вы можете сортировать данные на стороне клиента с помощью различных инструментов js.Это будет минимизировать запросы к базе данных

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