Si hay un error en un formulario de mi aplicación de grails esto da como resultado un mensaje de destello. Si luego voy a otra página, el mensaje flash (antiguo) aparece nuevamente en la página nueva. ¿Cómo evito esto?Prevenir el mensaje de destello que aparece dos veces (en la página con el error y en la página siguiente)
Respuesta
Una idea sería borrar el mensaje flash en la primera página cuando se detecta un error.
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>
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.
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.
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).
- 1. Sharepoint: el campo aparece dos veces en Ver/Nuevo elemento
- 2. ¿Cómo evitar que el contenido de la página se desplace cuando aparece el desplazamiento?
- 3. Mensaje de error: la página contiene demasiados redireccionamientos de servidor
- 4. Mensaje de error que ejecuta el ejemplo de la página de ayuda de reshape2
- 5. php redirigir a la página con el mensaje
- 6. La barra de desplazamiento no aparece en la página web
- 7. Prevenir el siguiente fragmento (pestaña) de la precarga con ViewPager
- 8. rieles parece estar al servicio de la página dos veces
- 9. Mensajes flash en Rails que se transfieren a la página siguiente
- 10. Coloque el bloque XSL-FO en la página siguiente en lugar de dividirlo en las páginas
- 11. AspxErrorPath en la página de error personalizado
- 12. UIWebview se bloquea con el siguiente mensaje en la consola
- 13. Obteniendo la página en blanco en lugar de la página de error 401
- 14. Prevenir HttpClient 4 de la siguiente redirección
- 15. El menú desplegable de la plantilla no aparece en la página del administrador de Wordpress
- 16. ¿Redirigir a la página 404 o mostrar el mensaje 404?
- 17. Rails 3.1 con Asset Pipeline, link_to: ¿confirma el mensaje que se muestra dos veces?
- 18. C# WIA ADF Tiene la siguiente página
- 19. Reutilizando la misma página varias veces
- 20. La carga de la página se dispara dos veces en Firefox
- 21. Envíe el formulario a otra página (que es diferente de la página utilizada en acción)
- 22. Dos ValidationSummary en la misma página
- 23. ¿Cuál es el CSS para hacer que algo vaya a la siguiente línea de la página?
- 24. Figura que abarca el ancho completo de la página en el artículo de dos columnas
- 25. Cambiar la transición de la página en la misma página
- 26. Precargar la página siguiente (o anterior) en ViewPager
- 27. Cambiar el tamaño del contenido de la página para que quepa en una página de impresión
- 28. Encabezado y pie de página personalizados en la página html
- 29. Lea el cuerpo del mensaje WCF dos veces: "No se puede leer el mensaje"
- 30. Cómo pasar página por programación a la página siguiente/anterior en jqGrid
Este problema me molestó, ¡qué lindo! – raffian