Grails — Как обновить GSP после изменения выбора?

#select #grails #instance #gsp

#выберите #grails #экземпляр #gsp

Вопрос:

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

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

Дело в том, что я не могу отобразить измененный экземпляр; единственный известный мне способ обновить GSP — создать окно.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)  'amp;selectedMonth='   escape(this.value)'
        )}"
        "/>
  

Спасибо!

Ответ №1:

Похоже, вам либо нужно

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

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

Комментарии:

1. @Robin: Я согласен, что вызов ajax (вариант 2) является более подходящим выбором, поскольку вы используете remoteFunction ( grails.org/Tag — remoteFunction )

Ответ №2:

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

     <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)  'amp;selectedMonth='   escape(this.value)',
            update : 'divId'
)}"/>
  

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

Нравится :

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