为什么在 lift mvc v2.3 中重定向后不显示 S.notice

发布于 2024-11-14 01:06:54 字数 354 浏览 0 评论 0原文

请求时:

case "page" :: AsInt(id) :: Nil => { S.notice(“世界你好!”) S.redirectTo("/index") }

重定向到:

case "index" :: Nil => { // 将 id 为“time”的元素的内容替换为日期 “#时间*”#> DependencyFactory.inject[日期].map(_.toString) 但是

“世界你好!”没有出现。如果我评论redirectTo,它将显示在页面上。

谁能告诉我为什么会话在重定向后没有持续存在?

when requesting:

case "page" :: AsInt(id) :: Nil => {
S.notice("Hello world!")
S.redirectTo("/index")
}

redirects to:

case "index" :: Nil => {
// replace the contents of the element with id "time" with the date
"#time *" #> DependencyFactory.inject[Date].map(_.toString)
}

however "Hello world!" doesn't show up. It will show up on page if I comment the redirectTo.

Can anyone tell me why the session isn't persisting past the redirect?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

稀香 2024-11-21 01:06:54

我想这是因为 S.notice() 将消息放置在请求范围内,并且在重定向(创建新请求)后该消息不可用。

请参阅探索 Lift 书中的以下引用:

net.liftweb.http.S 对象表示当前请求的状态。

您发送的消息由 S 对象中的 RequestVar 保存。

但:

您还可以发送 Lift 消息(通知、警告和错误)
将在重定向页面中呈现,以及在重定向时设置的 cookie。同样,S.redirectTo 的重载版本允许您指定处理重定向时要执行的函数。

因此,我认为您可以使用以下版本的 redirectTo 方法来实现此目的:

def redirectTo [T] (where: String, func: () ⇒ Unit) : T

并 make S.notice 在注册函数内调用(第二个参数)。

此致,
弗拉基米尔

I suppose that's because S.notice() places message in request scope and it's not available after redirect (new request is created).

See following quotes from Exploring Lift book:

The net.liftweb.http.S object represents the state of the current request.

The messages that you send are held by a RequestVar in the S object.

But:

You can also send Lift messages (notices, warnings, and errors) that
will be rendered in the redirected page, as well as cookies to be set on redirect. Similarly, there is an overloaded version of S.redirectTo that allows you to specify a function to be executed when the redirect is processed.

So I think you can use following version of redirectTo method for this purpose:

def redirectTo [T] (where: String, func: () ⇒ Unit) : T

and make S.notice call inside registered function (second parameter).

Best Regards,
Vladimir

溺孤伤于心 2024-11-21 01:06:54

试试这个...

S.redirectTo("/index", () => S.notice("Hello World!"))

try this...

S.redirectTo("/index", () => S.notice("Hello World!"))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文