根据我对Action组合的理解,我们可以围绕一个动作类包装多个动作类,以便在动作动作类之前首先调用包装类
所以,例如:
@With(a.class, b.class)
public static Result index() {
return ok("It works!");
}
public static Result logout(){
session().clear();
}
对index的任何调用都将首先通过&的call()方法。湾这里的关键是,在某些时候,需要将控件委托给index()方法。
我的问题是;是否可以在a或b中将调用从索引更改为注销。
我尝试调用controller.Application.logout()而不是delegate.call,但是logout方法没有得到上下文的句柄。有什么想法吗?
答案 0 :(得分:1)
我不相信你可以改变调用获得委托的方法,但你可以重定向到你的注销路线。
if (...)
return delegate.call(ctx);
else
return redirect(routes.Controller.logout()); //reverse-route to your logout() method
或者,我认为您可以执行类似这样的操作,将Context传递给您的注销方法。
// -- Action.class
return Controller.doLogout(ctx);
// -- Controller.java
public static Result logout()
{
// defined in your routes file but it just calls doLogout
return doLogout(ctx());
}
public static Result doLogout(Context ctx)
{
// this method does your actual "logout" process
ctx.session().clear();
return ...;
}