2016-03-03 61 views
0

如何在Play Framework 2.4(Java)中使用兩個動作組合?在Play框架中使用@With註釋的動作組合(Java)

假設爲避免代碼重複,我有兩個操作可供使用:AuthLogData

如何在動作組合中使用兩者?

這將不能編譯,造成重複標註錯誤:

# play.PlayExceptions$CompilationException: Compilation error[error: duplicate annotation]

@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; 
      } 
     } 
    } 

這只是一個骨架遺漏有些方法對這個問題沒有用處。

+0

你是什麼意思 「它不會工作」 嗎?你會得到一個異常?只有一個動作運行?這兩個動作都沒有運行?如何實施「Auth」和「LogData」? – Cubic

回答

1

雖然文件似乎並沒有清楚地說明這一點(至少我還沒有發現它的任何地方),預期的方式使用@With在類似案例,是通過所有操作一次(With需要一個數組)

你的代碼變得

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

the api doc

+0

這不編譯,得到另一個編譯錯誤: #play.PlayExceptions $ CompilationException:編譯錯誤[錯誤:註釋值必須是'name = value'形式] – Atropo

+0

@Atropo可能我的Java語法錯誤,它是自從我使用它以來已經有一段時間了。我將它改爲'value = ...',看看是否有效。 – Cubic

+0

儘管我覺得它應該像之前寫的那樣工作。 – Cubic