首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未显示revel flash消息

未显示revel flash消息
EN

Stack Overflow用户
提问于 2019-01-26 23:58:49
回答 2查看 257关注 0票数 0

我已经创建了一个默认skelton的revel web应用程序。

我已经创建了一个新的路由/操作/视图:

控制器操作:

代码语言:javascript
复制
func (c Ctrl1) Action3() revel.Result {
    variable1 := "test1"
    variable2 := "test2"
    c.Flash.Error("Message")
    return c.Render(variable1,variable2)
}

Action3.html:

代码语言:javascript
复制
{{set . "title" "Test"}}
{{template "header.html" .}}
{{template "flash.html" .}}
Hello: {{.variable1}}
{{template "footer.html" .}}

当我第一次运行我的webapp时,我看到了一条flash消息。但是下一次,如果我刷新页面,它就消失了!

我重新启动了revel

谢谢

EN

回答 2

Stack Overflow用户

发布于 2019-01-27 00:34:10

我不熟悉revel,但是当你需要通过重定向进行一些用户通信时,通常会使用消息“闪烁”。godoc似乎也将其描述为完全适用于该用例。

如果您直接在此请求处理程序中呈现模板,则可能不应该使用c.Flash。我的猜测是,revel只会显示与请求一起收到的flash消息。调用c.Flash.Error设置cookie中的字段,这意味着它将被发送回调用者,而不是模板。在下一次呈现时,它将从调用者发送回服务器的cookie中读取,其中将包含此flash消息。显然,设置新的flash消息会替换旧的消息,导致它(再次)将其发送给调用者,而不是模板。

好消息是,只有一种方法可以让您的消息出现在页面上,而且几乎可以肯定地将您的消息硬塞到页面上:模板数据!使用通常的机制发送消息,而不是调用c.Flash.Error。在本例中,假设您的flash.html模板包含以下内容:

代码语言:javascript
复制
{{ if .flash.error }}
    <div class="error">{{ .flash.error }}</div>
{{ end }}

您应该能够通过将c.Flash.Error("Message")行替换为:

代码语言:javascript
复制
c.ViewArgs["flash"] = map[string]string{"error": "Message"}
票数 0
EN

Stack Overflow用户

发布于 2019-01-27 01:15:05

这似乎是a known issue/expected behaviour。正如github上的讨论所暗示的那样,要使用flash消息来处理错误,您需要重定向:

代码语言:javascript
复制
c.Flash.Error("Message")
return c.Redirect("App/ShowError")

或者,如果需要将错误消息添加到特定输入元素的旁边,则使用field template function

由于您没有在模板中呈现表单,我猜您需要添加重定向。

顺便说一句:狂欢被许多人认为是有害的。我强烈建议您不要使用试图强迫您遵循经典MVC结构使用go的框架。如今,大多数web应用都是在客户端使用react的单页面应用,以及基于API的后端应用。沿着这条路走下去可能会让你的生活变得更容易?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54380070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档