Предотвращение появления Flash-сообщения дважды (на странице с ошибкой и на следующей странице) - PullRequest
7 голосов
/ 13 мая 2010

Если в моем приложении Grails есть ошибка, это приводит к появлению флеш-сообщения.Если я затем перейду на другую страницу, на новой странице снова появится (старое) флэш-сообщение.Как мне это предотвратить?

Ответы [ 5 ]

5 голосов
/ 10 февраля 2011

попробуйте использовать request.message, он действует так же, как flash.message, но будет оставаться включенным только достаточно долго, чтобы отображаться один раз.

Контроллер:

request.message = message;

и на gps вы используете его так же, как и с flash.message:

<g:if test="${request.message }"><br>
  <div class="message">${request.message}</div> </g:if>
2 голосов
/ 28 августа 2014

Я бы сказал, что если сообщение только для запроса, используйте request.message. Если возможна переадресация, используйте flash, а затем очистите флэш-сообщение после его отображения в gsp:

<div class="message">
    ${flash?.message}
</div>

<%
// Prevent flash messages displaying twice if there is no redirect
flash.message = null
%>

Я хотел бы иметь все это в стандартном шаблоне, который вы используете для отображения сообщений.

1 голос
/ 13 мая 2010

Одной мыслью было бы очистить флэш-сообщение на первой странице при обнаружении ошибки.

0 голосов
/ 25 октября 2016

цитата из документации Grails http://docs.grails.org/3.1.1/ref/Controllers/flash.html

Флэш-объект - это карта (хеш), которую вы можете использовать для хранения пар ключ-значение. Эти значения прозрачно хранятся в сеансе и затем очищаются в конце следующего запроса.

Этот шаблон позволяет использовать HTTP-перенаправления (что полезно для перенаправления после публикации) и сохранять значения, которые можно извлечь из флэш-объекта.

Вы должны помнить, как работает перенаправление http://grails.asia/grails-redirect-vs-forward

Когда вы делаете перенаправление, происходит возврат к браузеру клиента, и браузер вызывает URL-адрес, который он получил, тогда этот вызов является «следующим» запросом после добавления флэш-сообщения.

Тогда вам следует добавить флэш-сообщение перед перенаправлением. Потому что это флэш-сообщение очищается в конце следующего запроса. Или, если вы не используете редирект и просто делаете пересылку (например, простой возвратный рендеринг вашего gsp), после добавления флеш-сообщения нет другого запроса. Таким образом, следующий запрос будет при доступе к другой ссылке. Только в конце этого следующего запроса, а затем после рендеринга gsp, флэш-сообщение будет очищено от сеанса средой grails.

Заключить:

  • если вы хотите отображать сообщение при перенаправлении, используйте флэш-сообщение. Это автоматически очищается фреймворком.
  • если вы хотите отобразить сообщение при переадресации, вы можете использовать решение, указанное fonger (добавить сообщение в запросе).
0 голосов
/ 20 сентября 2013

Не уверен, что маршрут request.message по-прежнему доступен в более новой версии grails, когда я пытался это сделать, и он не работал для меня.

Метод, который я нашел, чтобы не показывать сообщение дважды, состоит в том, чтобы установить сообщение, используя более конкретную клавишу во флэш-памяти, такую ​​как:

Контроллер:

flash.specificKeyForControllerAndAction = "Some message"

GSP:

<g:if test="${flash.specificKeyForControllerAndAction}">
  <div class="message">${flash.specificKeyForControllerAndAction}</div>
</g:if>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...