为什么它返回302并且没有错误消息返回`Menu`中的`If`?

时间:2013-07-16 05:22:36

标签: scala lift

提升Boot.scala中的代码:

Menu.i("Topic") / "topic" >> If(() => false, "myerror")

来自If的文件:

/**
 * If the test returns True, the page can be accessed, otherwise,
 * the result of FailMsg will be sent as a response to the browser.
 * If the Loc cannot be accessed, it will not be displayed in menus.
 *
 * @param test -- the function that tests access to the page
 * @param failMsg -- what to return the the browser (e.g., 304, etc.) if
 * the page is accessed.
 */
case class If(test: () => Boolean, failMsg: FailMsg) extends AnyLocParam

它说:otherwise, the result of FailMsg will be sent as a response to the browser。所以我希望它返回一个5xx的http代码,错误消息为myerror,但不是,它会重定向到索引页/

并且卷曲:

➜  ~  curl http://localhost:8080/topic -I
HTTP/1.1 302 Found
Set-Cookie: JSESSIONID=5gqkx8azu8gh1u3avyjds3wl;Path=/
Location: /
Expires: Tue, 16 Jul 2013 05:18:02 GMT
Content-Length: 0
Cache-Control: no-cache, private, no-store
Content-Type: text/plain
Pragma: no-cache
Date: Tue, 16 Jul 2013 05:18:02 GMT
X-Lift-Version: 2.5
Server: Jetty(8.1.7.v20120910)

为什么它会返回302?我的错误消息myerror在哪里?

3 个答案:

答案 0 :(得分:0)

Menu.i("Topic") / "topic" >> If(() => false, RedirectResponse("/"))

答案 1 :(得分:0)

您使用的Lift版本是什么?

在Lift 2.4和Lift 2.5中,FailMsg是() ⇒ LiftResponse的别名,因此只需提供NotFoundResponse("myerror")即可。

Menu.i("Topic") / "topic" >> If(() => false, () => net.liftweb.http.NotFoundResponse("myerror"))

答案 2 :(得分:0)

您看到重定向的原因是,从String到重定向的隐式转换为/(默认情况下)设置了Lift错误通知。

该字符串用作错误通知的值,如果您在页面上包含提升通知,则可以看到该错误通知的值。看起来隐含的称为strToFailMsg

Lift Cookbook中的配方通过HTTP标头访问限制简要介绍了这一点。