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のいずれかで、呼び出しをindexからlogoutに変更することは可能ですか?

delegate.call の代わりに controller.Application.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 に答える