防止 Flash 消息出现两次(在有错误的页面上和在下一页上)
如果我的 grails 应用程序的表单中存在错误,则会出现一条闪现消息。如果我然后转到另一个页面,(旧的)闪存消息会再次显示在新页面上。 我该如何防止这种情况?
If there is an error in a form my grails application this results in a flash message. If I then go to another page, the (old) flash message shows up again on the new page.
How do I prevent this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
尝试使用 request.message,它的行为方式与 flash.message 相同,但只会停留足够长的时间以显示一次。
控制器:
在 GPS 上,您可以像使用 flash.message 一样使用它:
try using request.message, it act the same way as flash.message but will only stay on for on long enough to be displayed once.
controller:
and on gps you use it like you wold with flash.message:
我想说,如果消息仅用于请求,请使用 request.message。如果可能涉及重定向,请使用 flash,然后在 gsp 中显示后清除 flash 消息:
我会将所有这些内容放在用于显示消息的标准模板中。
I would say if the message is for request only, use request.message. If a redirect could be involved, use flash and then clear the flash message after displaying it in the gsp:
I would have all this in a standard template that you use for displaying messages.
一种想法是在检测到错误时清除第一页上的闪存消息。
One thought would be to clear the flash message on the first page when an error is detected.
不确定 request.message 路由是否仍然是较新版本的 grails 中的一个选项,因为我尝试了这个,但它对我不起作用。
我发现避免两次显示消息的方法是使用 flash 中更具体的键设置消息,例如:
Controller:
GSP:
显然该键可以是您想要的任何内容,但请确保您的其他视图没有检查相同的键,否则该消息将再次显示。
Not sure if the request.message route is still an option in the newer version of grails as I tried this and it didn't work for me.
A method I found to avoid showing the message twice is to set a message using a more specific key in flash such as:
Controller:
GSP:
Obviously the key could be anything you would like, but make sure your other views aren't checking for the same key or else the message will display again.
引用自 Grails 文档
http://docs.grails.org/3.1.1/ref/控制器/flash.html
您必须记住重定向的工作原理 http://grails.asia/grails-redirect-vs-forward< /a>
当你进行重定向时,会返回到客户端浏览器,浏览器会调用它收到的 url,那么这个调用就是添加 flash 消息后的“下一个”请求。
那么您应该在重定向之前添加一条提示消息。因为这个闪现消息在下一个请求结束时被清除。或者,如果您不使用重定向,而只是执行简单的转发(例如,gsp 的简单返回渲染),则在添加 flash 消息后不会有其他请求。因此,下一个请求将是当您访问另一个链接时。
只有在下一个请求结束时,然后在 gsp 渲染之后,grails 框架才会从会话中清除 Flash 消息。
结论:
quote from grails documentation
http://docs.grails.org/3.1.1/ref/Controllers/flash.html
You must remember how works redirect http://grails.asia/grails-redirect-vs-forward
When you do a redirect, there is a go back to the client browser, and the browser call the url it received, then this call is the "next" request after adding flash message.
Then you should add a flash message before a redirect. Because this flash message is cleared at the end of the next request. Or if you do not use a redirect, and just do a simple forward (a simple return render of your gsp for example) there is no other request after adding the flash message. Thus the next request will be when you access another link.
It is only at the end of this next request, then after the gsp rendering, that the flash message will be cleared from session by grails framework.
To conclude :