2013-07-01 31 views
2

我有这个在我的routes.conf文件:Play Framework - 如何重定向到由插件控制器生成的页面? [SecureSocial]

# SecureSocial routes 
# Login page 
GET  /login      securesocial.controllers.LoginPage.login 

然后,我有这个在斯卡拉控制器的文件

val index = SecuredAction { implicit request => 
    Redirect(routes.UserOps.watchlist) 
    // how do I go straight to /login? >| 
} 

这样做需要我,有一个登录页面红色错误栏显示“您必须登录才能查看此页面”。如果我访问`本地主机:9000 /登录'我得到没有错误栏的登录页面。

通常我做了Redirect(routes.SomeControllerObject.ActionMethodName)但在这种情况下,我需要访问控制器是一个插件...

我觉得我失去了一些东西相当大的在这里...

回答

3

更新:

要反向路由到一个插件控制器的操作,你需要提供正确,完整路径该插件的routes类。

Redirect(securesocial.controllers.routes.LoginPage.login) 

原来的答案

对于反向路由我不认为它很重要,其中Controller是因为游戏正在建设当项目编译。从文档:

For each controller used in the routes file, the router will generate a ‘reverse controller’ in the routes package, having the same action methods, with the same signature, but returning a play.api.mvc.Call instead of a play.api.mvc.Action .

所以这应该工作一样,如果 LoginPage直接控制器在您的应用程序。

Redirect(routes.LoginPage.login); 

+0

不,我得到一个编译错误:'值LoginPage不是对象controllers.routes'的成员 – Meredith

+0

我认为它把它放在一起,但不要猜测。然后尝试给它完整的路径。 '重定向(securesocial.controllers.routes.LoginPage.login)' – estmatic

+0

哼!没有更多的编译错误。尽管如此,我还是得到了“您必须登录才能查看该页面”的错误栏,所以......我的登录页面显示没有红色提示的唯一方法是进入'localhost :9000/login'直接。我想我需要在我的Action中执行某种'GET/login' http请求,以便发生这种情况 – Meredith

1

为了要显示消息,您必须在Flash中有一个项目。当您直接点击/登录时,没有闪光灯,所以您不会看到该消息。

如果你想看到这样的信息:

Redirect(securesocial.controllers.LoginPage.login).flashing(...)

+0

我得到一个编译错误...'重载方法值[重定向]不能被应用到(play.api.mvc.Action [play.api.mvc.AnyContent])' – Meredith

相关问题