0

根据我对动作组合的理解,我们可以将多个动作类包装在一个动作类周围,以便在动作动作类之前首先调用包装的类

所以,例如:

@With(a.class, b.class)
public static Result index() {
  return ok("It works!");
}

public static Result logout(){
  session().clear();
}

任何对 index 的调用都将首先通过 a & b 的 call() 方法。这里的关键是,在某个时间点,需要将控制权委托给 index() 方法。

我的问题是;是否可以在 a 或 b 中将呼叫从索引更改为注销。

我尝试调用 controller.Application.logout() 而不是 delegate.call 但 logout 方法没有得到上下文的句柄。有任何想法吗?

4

1 回答 1

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 ...;
}
于 2013-06-25T20:12:57.670 回答