2015-03-10 3 views
0

Моего Grails приложение использует версию 2.3.6Grails: Обновление Index.gsp от другого контроллера

В этом приложении есть класс контроллера:

class UserOrderController { 

def index(Integer max) { 
     params.max = Math.min(max ?: 20, 100)  
     respond UserOrder.list(params), model:[userOrderInstanceCount: WorkOrder.count()] 
    } 
} 

Теперь в другом контроллере я доступ к UserOrder объекты и фильтрация на основе идентификатора продукта. Идентификатор продукта - это свойство строки в классе домена UserOrder.

Другой контроллер:

class UserOrderFilterController { 

def getUOBasedOnID() { 

    // Here i get a new list for **UserOrder** 
    // Now i want to draw the UserOrderController page with the new list 
} 
} 

Я довольно новый для Grails и не знает, как это сделать.

Должен ли я создавать новую функцию INDEX в классе UserOrderController и передавать новый список?

Как показано ниже:

class UserOrderController { 

def index(Integer max) { 
     params.max = Math.min(max ?: 20, 100)  
     respond UserOrder.list(params), model:[userOrderInstanceCount: userOrder.count()] 
    } 

def index(List UserOrder) { 

    // create page??? 
} 

} 

UPDATE:

UserOrderFilterController имеет собственный index.gsp файл. Что вы делаете: Доступ ко всем объектам класса DomainOrder и их фильтрация на основе свойства.

Теперь в index.gsp UserOrderFilterController i покажет общее количество найденных объектов/заказов. Этот номер будет показан с гиперссылкой использованием HREF и когда пользователь нажимает на нее, она будет идти к index.gsp странице UserOrderController только фильтрованной UserOder «ы отображаются.

Так что я ожидаю это:

<a href='${createLink(controller:'UserOrder', action:'index')}'>%s</a> 

HREF, как показано выше, с Params поле, которое будет иметь отфильтрованный список UserOrder «s.

Я понятия не имею, как добавить параметры/список в href. Это возможно?

ответ

1

Каждый action в Грайле имеет соответствующее view. Дублирующие действия требуют неприятностей. Если у вас есть функция , которая заслуживает отдельной страницы, то вам необходимо создать новое действие и новое представление.

Если это принадлежит на домашней странице, а затем передать его через тот же метод index.

Обратите внимание, что в grails вы просто передаете значения на страницу .gsp, а страница .gsp - это то, что обрабатывает форматирование данных. Ваш action должен обладать абсолютным знанием структуры представления. Это основная концепция MVC.

В этом случае вы можете перенаправить на контроллер согласно the docs. Тот, который должен заинтересовать вас больше всего это:

redirect(controller: "yourController", action:"index", params=[filteredList: filteredList]); 

будет переадресован к существующему действия указателя в UserOrderController, и передать в отфильтрованный список. Оттуда, вы можете иметь что-то вроде ..

if(params.filteredList) { 
    // You know this came from the filtered controller, so display this and don't 
    // make a DB call. 
} 

следует отметить

  • Структура ваших Граалей приложение беспокоит меня. Почему у вас есть совершенно отдельный контроллер для простой фильтрации данных?

Редактировать

Принимая createLink подход можно улучшить немного. Вместо ..

<a href='${createLink(controller:'UserOrder', action:'index')}'>%s</a> 

Вы можете использовать g:link функциональность:

<g:link controller="UserOrder" action="index" params=['filteredList':filteredList]>%s</g:link> 
+0

Пожалуйста, см. Обновленный контент в моем исходном вопросе. – donguy76

+0

В файле index.gsp UserOrderController он использует таблицы EasyGrid для отображения данных. В моей ** функции getUOBasedOnID ** в классе ** UserOrderFilterController ** у меня есть локальный список ** UserOrder's **, как я могу убедиться, что этот список сам заполняется в index.gsp в ** UserOrderController **? ?? – donguy76

+0

Вы добавляете в свой пример все больше и больше сложности. Можете ли вы создать * полное * объяснение вашего кода? – christopher

1

Если вы пытаетесь создать новый контроллер для фильтра UserOrderFilterController, вы можете сделать

class UserOrderFilterController { 

def getUOBasedOnID() { 

    //get filtered list 
    respond filteredList, [view:'userOrder/index',model:[userOrderInstanceCount: filteredListCount]] 
    } 
} 

Вы можете увидеть подробнее об ответе here.

+0

Пожалуйста, см. Обновленный контент в моем исходном вопросе. – donguy76

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