Я новичок в Grails и MVC, поэтому, пожалуйста, потерпите меня.
У меня есть ссылки на мой GSP, которые выполняют статическую фильтрацию. Например, приведенный ниже пример возвращает только
эти Request
экземпляры класса домена со статусом Открыть . Но я также хочу иметь возможность выполнять динамическую фильтрацию на той же модели ( результаты в коде ниже).
Вариант использования будет выглядеть примерно так: пользователь видит все Request
экземпляры класса домена в таблице. Он нажимает на ссылку Открытые запросы и получает только те Request
экземпляров, которые имеют статус свойство со значением Open . Затем он устанавливает dateFrom
и dateTo
, используя элемент управления выбора даты, и нажимает кнопку Filter , которая вызывает метод / действие, которое дополнительно фильтрует данные из таблицы. Таким образом, он должен возвращать только те запросы, которые открыты и созданы в течение указанного периода.
def openedRequests = {
def contact = Contact?.findByUser(springSecurityService.currentUser)
def productlines = contact.productlines()
def requestCriteria = Request.createCriteria()
def results = requestCriteria.list {
eq("status", "Open")
and {
'in'("productline",productlines)
}
}
render(view:'supportList', model:[requestInstanceList:results, requestInstanceTotal: results.totalCount])
}
EDIT
На моем GSP есть несколько ссылок, которые вызывают действия контроллера, которые выполняют фильтрацию экземпляров некоторого класса домена. Например, у меня есть OpenedRequests, ClosedRequests, NewRequests. Но у меня также есть некоторые текстовые поля, комбинированные списки, элементы управления datePicker для дополнительной фильтрации. Я вызываю действие filterRequests с помощью кнопки.
def filterRequests = {
def contact = Contact?.findByUser(springSecurityService.currentUser)
def productlines = contact.productlines()
def requestCriteria = Request.createCriteria()
def results = requestCriteria.list {
if(params.fDateFrom && params.fDateTo){
def dateFrom = new SimpleDateFormat("dd.MM.yyyy").parse(params.fDateFrom_value)
def dateTo = new SimpleDateFormat("dd.MM.yyyy").parse(params.fDateTo_value)
between("dateCreated",dateFrom,dateTo)
}
if(params?.fStatus){
eq("status",params.fStatus)
}
if(params?.fCompany){
eq("company", params.fCompany)
}
and {'in'("productline",productlines)
}
if(params.sort != null && params.order != null){
order(params.sort, params.order)
}
}
render(view:'supportList', model:[requestInstanceList:results, requestInstanceTotal: results.totalCount])
}
Я хочу иметь возможность фильтровать экземпляры запроса по некоторым из упомянутых ссылок, а затем установить дополнительные фильтры, например, dateFrom i dateTo с datePicker. Я хочу, чтобы эти фильтры знали о предыдущей фильтрации со ссылкой, если таковые были. Как правильно это сделать?