Grails - Как обновить GSP после изменения выбора? - PullRequest
3 голосов
/ 26 апреля 2011

Я написал класс домена и создал леса для контроллера и представлений. Я немного изменил list.gsp и список действий. Чтобы отфильтровать то, что отображается, я поместил тег g: select на странице.

Всякий раз, когда значение в выборе изменяется, контроллер списка запускается снова и фильтрует возвращенный экземпляр данных. Это работает как шарм.

Дело в том, что я не могу отобразить измененный экземпляр; единственный способ, которым я знаю, чтобы обновить GSP, это сделать window.location.reload (), но это приведет к повторной инициализации страницы. Так что все вернулось к дефолту.

Итак, вот вопрос: как я могу заставить мой GSP собирать измененные данные экземпляра и отображать их?

Например, один из вариантов. Возвращенный экземпляр фильтруется через выбранные переменные месяца и года.

        <g:select id="monthSelection" from="${['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec']}" value="${inputYear}" onchange="${remoteFunction(
        action:'list', 
        params:'\'selectedYear=\' + escape(yearSelection.value) +\'&selectedMonth=\' + escape(this.value)'
        )}"
        "/>

Спасибо!

Ответы [ 2 ]

4 голосов
/ 26 апреля 2011

Звучит так, как будто вам нужно

  1. перезагрузить всю страницу при выборе месяца (передавая выбранный месяц в качестве параметра), или
  2. измените ваш метод remoteFunction, чтобы он возвращал представление шаблона, и задайте параметр update в вызове remoteFunction, чтобы указать, какой div на странице должен динамически обновляться с содержимым из возвращенного представления.

Я использовал вариант 2 в нескольких случаях, когда мне нужно было обновить ajax, и он работал хорошо.

3 голосов
/ 26 апреля 2011

Попробуйте что-то вроде этого:

    <g:select id="monthSelection" from="${['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec']}" value="${inputYear}" onchange="${remoteFunction(
            action:'list', 
            params:'\'selectedYear=\' + escape(yearSelection.value) +\'&selectedMonth=\' + escape(this.value)',
            update : 'divId'
)}"/>

Здесь 'divId' должен содержать html-часть, которую необходимо обновить после вызова ajax с действием списка.

Как:

<div id='divId'>
.....
....
</div>
...