9

Play 1.2を使用していたとき、このコントローラー内の各リクエストの前または後にメソッドを実行するために、コントローラー内の一部のメソッドに@Beforeまたは@After(およびその他...)のアノテーションを付けることができました。

Play 2.0でこれを行うにはどうすればよいですか?

Globalオブジェクトについて少し読みましたが、探しているものではないようです。また、アクションの構成は、私がやりたいことには複雑すぎるようです。もっと簡単なものを見たいです。

何か案は?

4

2 に答える 2

8

残念ながら、にはアクションコンポジションを使用する必要@Beforeがあり、に相当するものはありません@After

については、終了アクションの最後に@After独自のメソッドを記述します。afterこのようなもの:

public static Result index() {
    ....
    Result result = ...;
    return after(result);
}

protected static Result after(Result result) {
    ...
    Result afterResult = ...,
    return afterResult

}
于 2012-10-02T06:30:42.637 に答える
4
public class Logging {

    @With(LogAction.class)
    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Logs {

    }

    public static class LogAction extends Action<Logs> {

        private void before(Context ctx) { 
            System.out.println("Before action invoked");
        } 

        private void after(Context ctx) { 
            System.out.println("After action invoked");
        } 

        public F.Promise<Result> call(Http.Context context) throws Throwable {
            before(context); 
            Promise<Result> result = delegate.call(context);
            after(context);
            return result; 
        }
    }

}

コントローラで@Logsを使用してアノテーションを付けます。

于 2015-06-19T05:45:24.050 に答える