2010-05-13 11 views

Respuesta

0

Una idea sería borrar el mensaje flash en la primera página cuando se detecta un error.

4

intente utilizar request.message, actúe de la misma manera que flash.message pero solo se mantendrá encendido el tiempo suficiente para que se muestre una vez.

controlador:

request.message = message; 

y en el GPS que lo utilice como usted wold con flash.message:

<g:if test="${request.message }"><br> 
    <div class="message">${request.message}</div> </g:if> 
+0

Este problema me molestó, ¡qué lindo! – raffian

0

No estoy seguro si la ruta request.message sigue siendo una opción en la versión más reciente de los griales cuando probé esto y no funcionó para mí.

Un método que encontré para evitar mostrar el mensaje dos veces es configurar un mensaje usando una clave más específica flash, tales como:

controlador:

flash.specificKeyForControllerAndAction = "Some message" 

GSP:

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

Obviamente, la clave podría ser cualquier cosa que desee, pero asegúrese de que sus otras vistas no estén buscando la misma clave o de lo contrario el mensaje volverá a aparecer.

1

Yo diría que si el mensaje es sólo para solicitud, use request.message. Si una redirección podría estar implicado, usar flash y luego borrar el mensaje flash después de mostrarla en el SGP:

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

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

que sería tener todo esto en una plantilla estándar que se utiliza para mostrar mensajes.

0

cita de documentación griales http://docs.grails.org/3.1.1/ref/Controllers/flash.html

El objeto flash es un mapa (un hash) que se puede utilizar para almacenar pares de valores clave. Estos valores se almacenan de forma transparente dentro de la sesión y luego se borran al final de la próxima solicitud.

Este patrón le permite usar redireccionamientos HTTP (que es útil para redirigir después de la publicación) y conservar los valores que se pueden recuperar del objeto flash.

Debe recordar cómo funciona la redirección http://grails.asia/grails-redirect-vs-forward

Al hacer una redirección, hay un ir de nuevo al navegador del cliente y el navegador llaman la URL que recibió, a continuación, esta llamada es la "próxima" solicitud después de agregar un mensaje flash.

Luego debe agregar un mensaje flash antes de una redirección. Porque este mensaje flash se borra al final de la siguiente solicitud. O si no usa un redireccionamiento, y simplemente realiza un reenvío simple (un simple retorno de representación de su gsp, por ejemplo) no hay otra solicitud después de agregar el mensaje flash.Por lo tanto, la próxima solicitud será cuando acceda a otro enlace. Es solo al final de esta próxima solicitud, luego después del renderizado gsp, que el mensaje flash se eliminará de la sesión por el framework de Grails.

Para concluir:

  • si desea mostrar un mensaje cuando haces un mensaje flash uso de redireccionamiento. Se borra automáticamente por el marco.
  • si desea mostrar un mensaje cuando hace un reenvío, puede usar una solución según lo indicado por fonger (agregue un mensaje en la solicitud).
Cuestiones relacionadas