Grails - sortableColumn - принудительная числовая сортировка по числовым строкам
У меня есть номер, хранящийся в моей базе данных в виде строк, и я хотел бы отсортировать их численно, используя Grails sortableColumns
, Есть какой-либо способ сделать это?
1 ответ
Хранение чисел в виде отформатированных строк не позволяет им воспользоваться преимуществами собственной числовой сортировки. Посмотрите на тэг Grails formatNumber, который может использовать желаемую локаль для отображения десятичных разделителей, чтобы вы могли использовать фактические числовые данные, и вам не нужно сохранять отформатированную строку для целей отображения.
Если класс домена, который вы хотите отсортировать, содержит как отформатированные, так и неформатированные числовые данные, вы можете попробовать что-то вроде этого, подставив при необходимости параметр столбца сортировки:
def list = {
if (params?.sort == 'formattedNumber') {
params.sort = 'rawNumber'
}
[ records : Record.list(params) ]
}
Если ваш класс домена имеет только отформатированную строку, вы можете попытаться проанализировать ее как BigDecimal (или любой другой соответствующий числовой тип), но это может не работать должным образом, если языковой стандарт вашего сервера не совпадает с языковым стандартом десятичного разделителя строкового формата.
def list = {
def records = (params?.sort == 'formattedNumber') Record.list().sort{ it.formattedNumber.toBigDecimal() : Record.list(params)
}
[ records : records ]
}