Grails: Почему флеш-сообщение отображается только после обновления, если вы используете ajax? - PullRequest
1 голос
/ 12 января 2012

Вот проблема: у меня есть remoteForm, который сам по себе работает нормально.Я отладил контроллер, и каждая команда проходит.Однако, если возникает исключение, и я устанавливаю сообщение flash.error.Сообщение будет отображаться только ПОСЛЕ того, как я вручную нажму F5 (Обновить).Я не понимаю, почему AJAX-вызов работает, но флэш-сообщения пусты.

У меня есть удаленная форма (в index.gsp):

       ...
         <g:formRemote name="remoteForm"
                      url="[ controller: 'document',
                       action: 'search']"
                       onLoading="showSpinner();"
                       update="searchBlock"
                       action="${createLink(controller: 'document', action:'search')}"
                       >

        <div class='info_message'>
            ${flash.message}
        </div>
        <div id="searchBlock">will be exchanged</div>
       ......

Контроллер:

    ......
        } catch (Exception e){
            log.error(e)
            flash.error = e.getMessage()
            flash.message="HINTTEST"
            render (template:'searchNoResult')
            return
        }
    .....

Шаблон (из _searchNoResult) имеет следующее содержимое:

 <span>Sorry, your search yielded no result.</span>

  <g:if test='${flash.error}'>
        <div class='error_message'>
            Error: ${flash.error}
        </div>
    </g:if>
    <g:if test='${flash.messages}'>
        <div class='info_message'>
            Hint: ${flash.message}
        </div>
    </g:if>

Документация гласит: флэш-памятьОбласть действия проходит через текущий запрос и вызов после этого.Если я использую обычную форму и отправляю, все работает, но я хочу использовать ajax и шаблоны визуализации, поэтому мне не придется повторять код так часто.

Редактировать 1 Сначала индекс.GSP отображается.RemoteForm изменяет div seachBlock с шаблоном, который содержит flash.messages.Они не заполнены.

Grails версии 1.3.7, в настоящий момент обновление невозможно.

Редактировать 2 Исключение e не было исключением, которое былооригинал, брошенный мной.Сообщение было пустым, что привело к пустым сообщениям ....

1 Ответ

5 голосов
/ 12 января 2012

Из кода, который вы показали, ничего не обновляется div info_message с сообщением, когда ajax-запрос возвращает ответ.FormRemote только обновляет элемент searchBlock. Если страница не обновляется, flash.message не может быть обработано.

...