флеш-сообщения не отображаются - PullRequest
0 голосов
/ 26 января 2019

Я создал веб-приложение revel с skelton по умолчанию.

Я создал новый маршрут / действие / вид:

Действие контроллера:

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" .}}

Когда я впервые запустил свое веб-приложение, я увидел флэш-сообщение. Но в следующий раз, если я обновлю страницу, она исчезнет!

Я возобновил пирушку

Спасибо

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Кажется, это известная проблема / ожидаемое поведение .Как показывает обсуждение github, чтобы использовать флэш-сообщение для ошибок, вам нужно либо перенаправить:

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

, либо использовать шаблонную функцию field , если вам нужнодобавить сообщение об ошибке рядом с конкретным элементом ввода.

Поскольку вы не визуализируете форму в шаблоне, я предполагаю, что вам нужно добавить перенаправление.


Кстати, многие считают, что revel считаетсявредны.Я призываю вас не использовать фреймворк, который пытается заставить вас следовать классической структуре MVC.В настоящее время большинство веб-приложений представляют собой одностраничные приложения, использующие реакцию на стороне клиента, и основанный на API бэкэнд.Возможно, вам тоже будет легче идти по этому пути?

0 голосов
/ 26 января 2019

Я не знаком с revel, но сообщение "мигание" обычно используется, когда вам нужно некоторое общение с пользователем для переноса через перенаправление. godoc , по-видимому, описывает это точно также для этого варианта использования.

Если вы визуализируете шаблон непосредственно в этом обработчике запросов, вам, вероятно, не следует использовать c.Flash. Я предполагаю, что revel покажет только флэш-сообщение , полученное с запросом. Вызов c.Flash.Error устанавливает поле в cookie, что означает, что оно будет отправлено обратно вызывающей стороне, а не шаблону. При рендеринге next он будет считывать из cookie-файла, который вызывающий абонент отправляет обратно на сервер, который будет включать это флэш-сообщение. Однако, по-видимому, установка нового флэш-сообщения заменяет старое, заставляя его (еще раз) отправлять его вызывающей стороне, а не шаблону.

Хорошая новость заключается в том, что на самом деле ваше сообщение может попасть только на одну страницу, и вы почти наверняка можете вставить туда свое сообщение: данные шаблона! Вместо вызова 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"}
...