2010-07-08 2 views
0

Я использовал регулярную datePicker от grails, но я решил, что было проще использовать textField с календарем рядом с ним, и мне было рекомендовано использовать Grails-UI.grails - как заставить фильтр распознавать значения с datePicker с помощью графического плагина Grails?

Моя проблема в том, что теперь, когда я нажимаю для применения фильтров, они не работают. Почему-то их не узнают.

Любая помощь была бы принята с благодарностью.

Вот код для контроллера:

def searchResults = { 
    def fromCal 
    if(params?.lastUpdatedD) { 
fromCal = Calendar.getInstance() 
fromCal.setTime(params?.lastUpdatedD) 
fromCal.set(Calendar.HOUR_OF_DAY,0) 
fromCal.set(Calendar.MINUTE,0) 
fromCal.set(Calendar.SECOND,0) 
fromCal.set(Calendar.MILLISECOND,0) 
} 

def toCal 
if(params?.lastUpdatedH) { 
toCal = Calendar.getInstance() 
toCal.setTime(params?.lastUpdatedH) 
toCal.set(Calendar.HOUR_OF_DAY,23) 
toCal.set(Calendar.MINUTE,59) 
toCal.set(Calendar.SECOND,59) 
toCal.set(Calendar.MILLISECOND,999) 
} 

def entryCriteria = Entry.createCriteria() 
def results = entryCriteria.list { 
and{if(params?.fechaCambioD && params?.fechaCambioH) { 
between("fechaCambio", params.fechaCambioD, params.fechaCambioH) 
} 

if(params?.lastUpdatedD && params?.lastUpdatedH) { 
between("lastUpdated", fromCal.getTime(), toCal.getTime()) 
} 

if(params?.proyectoRutaN) { 
ilike("proyectoRuta","%${params.proyectoRutaN}%") 
}  
} 

} 

render(view:'searchResults', model:['results':results, 'proyectoRutaN':params?.proyectoRutaN, 'fechaCambioD':params?.fechaCambioD, 'fechaCambioH':params?.fechaCambioH, 'lastUpdatedD':'', 'lastUpdatedH':params?.lastUpdatedH]) 

А вот кусок кода в search.gsp, где графический интерфейс: Datepicker объявлен

<gui:datePicker name="fechaCambioH" value="${params?.fechaCambioH}" formatString="dd/MMM/yyyy"/>

Если изменить их до <<gui:datePicker name="fechaCambioH" value="${params?.fechaCambioH}" precision="day" default="none" noSelection="['':'']" years="${2010..2015}"/>/> он отлично работает, но он дает мне 3 выпадающих ящика для дневного месяца и года, и идея состоит в том, чтобы использовать только один текстовый экран с календарем рядом с ним, чтобы помочь ему выглядеть лучше.

Заранее спасибо

UPDATE

Вот код, я имею в list.gsp

def list = { 
    params.max = Math.min(params.max ? params.int('max') : 10, 100) 
    [entryInstanceList: Entry.list(params), entryInstanceTotal: Entry.count()] 
    def today = Calendar.getInstance() 
    today.setTime(new Date()) 
    today.set(Calendar.HOUR_OF_DAY, 0) 
    today.set(Calendar.MINUTE, 0) 
    today.set(Calendar.SECOND, 0) 
    today.set(Calendar.MILLISECOND, 0) 
    def results = Entry.findAllByFechaCambioGreaterThanEquals(today.getTime()) 
    render(view:'list', model:['entryInstanceList':results]) 

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

Я думаю, это звучит немного запутанно, надеюсь, вы сможете помочь.

Заранее благодарен!

ответ

1

Передача строкового значения даты на ваш контроллер. Вам нужно проанализировать строку, отправленную контроллеру в объект Date. Посмотрите на метод parse() класса Date (http://groovy.codehaus.org/groovy-jdk/java/util/Date.html) и класс SimpleDateFormat (http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html). Используйте документацию в SimpleDateFormat, чтобы создать строку формата для вашей даты, а затем используйте класс Date для синтаксического анализа строки в Date. Например ...

def dateFmt = "dd/MMM/yyyy" 
def fechaCambioDateH 
def toCal 
if(params?.fechaCambioH) { 
    fechaCambioDateH = Date.parse(dateFmt, params?.fechaCambioH) 
    toCal = Calendar.getInstance() 
    toCal.setTime(fechaCambioDateH) 
    // You may not need these anymore: 
    toCal.set(Calendar.HOUR_OF_DAY,23) 
    toCal.set(Calendar.MINUTE,59) 
    toCal.set(Calendar.SECOND,59) 
    toCal.set(Calendar.MILLISECOND,999) 
} 

Update:

К сожалению, не будет вписываться в комментарии:

Позвольте мне объяснить, что причиной такого поведения, и вы можете быть в состоянии работать через это один по своему усмотрению; вам кажется, что вы начинаете разыгрывать Грайла. Когда вы отправляете свою форму фильтра, вы отправляете все свои данные о датах даты, proyectoRuta и т. Д. Надеюсь, вы уже знаете, что это операция POST, браузер позаботится о передаче всех этих данных на ваш сервер, Grails заботится о упаковывая его в удобный объект params, к которому вы можете получить доступ. Однако, когда вы нажимаете на ссылки сортировки, это операция GET. Браузер просто отправляет URL-адрес на задний план. В основном, это влияет на поиск ваших критериев, но все параметры, которые вы проверяете, равны нулю.Таким образом, вы получаете весь список объектов домена. На данный момент ваша работа становится намного сложнее, потому что вы только что обнаружили, что все мы оказались в той или иной момент: вам нужно управлять состоянием в веб-приложении. Самый простой способ сделать это - хранить данные в сеансе пользователя. Это вводит некоторую сложность, большую сложность, так как у вас есть логика поиска, распределенная по нескольким действиям (по умолчанию против фильтра). Вы можете либо сохранить результаты поиска в сеансе, либо использовать Comparator для их сортировки, либо сохранить критерии поиска в сеансе и применить другой порядок/порядок, когда кто-то нажимает на ссылку сортировки.

+0

Я думаю, что я собираюсь использовать jQuery-UI, есть много информации в Интернете и по какой-то причине кажется, что это проще. – randomizertech

+0

По какой-то причине календарь не открывается, когда я нажимаю поле ввода -__- «Как объявить календарь в контроллере?» На странице плагина Grails говорится, что нужно поставить def testDatePicker = {}, но это не имеет значения если я ничего не делаю: S – randomizertech

+0

вы установили плагин gui? установите класс css для тела yui-skin-sam? – proflux

Смежные вопросы