0

电梯代码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

4

3 回答 3

0
Menu.i("Topic") / "topic" >> If(() => false, RedirectResponse("/"))
于 2013-07-16T07:02:18.443 回答
0

您使用的是什么电梯版本?

在 Lift 2.4 和 Lift 2.5 中,FailMsg 是 的别名() ⇒ LiftResponse,所以只需简单地提供NotFoundResponse("myerror")应该可以工作。

Menu.i("Topic") / "topic" >> If(() => false, () => net.liftweb.http.NotFoundResponse("myerror"))
于 2013-07-16T08:07:46.947 回答
0

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

该字符串用作错误通知的值,如果您在页面上包含电梯通知,您可以看到显示的值。看起来隐式被调用strToFailMsg

Lift Cookbook的 HTTP 标头访问限制秘诀简要介绍了这一点。

于 2013-07-31T21:58:47.083 回答