在Play框架中使用@With注释的动作合成(Java)

时间:2016-03-03 10:52:35

标签: model-view-controller playframework playframework-2.0

如何在Play Framework 2.4(Java中)中使用两个动作合成?

假设为避免代码重复,我有两个操作可供使用:AuthLogData

如何在动作合成中同时使用它们?

这将无法编译,导致重复的注释错误:

  

#play.PlayExceptions $ CompilationException:编译错误[错误:   重复注释]

 @play.db.jpa.Transactional()
        @With(Auth.class)
        @With(LogData.class)
        public static Result callForumTeacher(String random, Long gameId){
               //Action code 
               return ok(Json.toJson("data"));
        }

这是AuthLogData的实施方式的骨架:

public class CheckPausedGame extends Action.Simple {

     @Override
        public F.Promise<Result> call(Http.Context context) throws Throwable {
            if (checkCondition(context)) {
                return delegate.call(context);
            } else {
                F.Promise<Result> promise = F.Promise.promise(new F.Function0<Result>() {
                    @Override
                    public Result apply() throws Throwable {
                        return redirect("/paused");
                    }
                });
                return promise;
            }
        }
    }

这只是一个骨架,省略了一些对这个问题无用的方法。

1 个答案:

答案 0 :(得分:1)

虽然文档似乎没有明确说明这一点(至少我没有在任何地方找到它),但在这种情况下使用@With的预期方法是一次性传递所有动作({{ 1}}采用数组)

您的代码变为

With

请参阅the api doc