如何在play framework 2.0中的动作合成期间更改包装的动作调用

时间:2013-06-25 18:08:43

标签: playframework-2.0 function-composition

根据我对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方法没有得到上下文的句柄。有什么想法吗?

1 个答案:

答案 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 ...;
}