陶醉的闪光消息不显示

时间:2019-01-26 15:58:49

标签: go revel

我用默认的kelton创建了一个revel Web应用程序。

我创建了一个新的路线/操作/视图:

控制器动作:

func (c Ctrl1) Action3() revel.Result {
    variable1 := "test1"
    variable2 := "test2"
    c.Flash.Error("Message")
    return c.Render(variable1,variable2)
}

Action3.html:

{{set . "title" "Test"}}
{{template "header.html" .}}
{{template "flash.html" .}}
Hello: {{.variable1}}
{{template "footer.html" .}}

我第一次运行Webapp时,看到了闪断消息。 但是下一次,如果我刷新页面,它就会消失!

我已经重新开始狂欢

谢谢

2 个答案:

答案 0 :(得分:0)

我对revel不熟悉,但是当您需要一些用户通信来通过重定向进行传递时,通常会使用消息“闪烁”。 godoc似乎也针对该用例进行了准确的描述。

如果直接在此请求处理程序中呈现模板,则可能不应该使用c.Flash。我对发生的情况的猜测是,revel仅会在请求中显示Flash消息 received 。调用c.Flash.Error会设置cookie中的字段,这意味着它将被发送回调用方,而不是模板。在 next 呈现器上,它将从调用者发送回服务器的cookie中读取信息,其中将包含此flash消息。但是,显然,设置新的即插即用消息会替换旧的即插即用消息,从而(再次)将其发送给呼叫者而不是模板。

好消息是,实际上只有一种方法可以使您的消息显示在页面上,并且您几乎可以肯定地在其中消息:模板数据!而不是调用c.Flash.Error,而是使用通常的机制发送消息。在这种情况下,假设您的flash.html模板包含以下内容:

{{ if .flash.error }}
    <div class="error">{{ .flash.error }}</div>
{{ end }}

您应该可以通过将c.Flash.Error("Message")行替换为以下内容来传递数据:

c.ViewArgs["flash"] = map[string]string{"error": "Message"}

答案 1 :(得分:0)

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

c.Flash.Error("Message")
return c.Redirect("App/ShowError")

或者如果您需要在特定输入元素旁边添加错误消息,请使用field template function

由于您未在模板中呈现表单,因此我猜想您需要添加重定向。


偶然地:许多人认为陶醉是有害的。我敦促您不要使用试图强迫您遵循经典MVC结构的go框架。如今,大多数Web应用程序都是在客户端使用React和基于API的后端的单页应用程序。也可能使您的生活更容易走这条路?