2012-03-30 3 views
1

PlayとScala/Javaの新機能です。が動作しない

私はtypesafe.comからタイプセーフ・スタックをインストールし、テストのための新しいプロジェクトを作成:G8 typesafehub/PLAY-Scalaの を私はアノテーションTestAnn.javaを作成した後:

package ann; 

import play.mvc.With; 

import java.lang.annotation.Documented; 
import java.lang.annotation.ElementType; 
import java.lang.annotation.Inherited; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

@With(TestAnnAction.class) 
@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.METHOD, ElementType.TYPE}) 
@Documented 
@Inherited 
public @interface TestAnn { 

} 

とTestAnnAction.java enter code here

package ann; 

import play.mvc.Http; 
import play.mvc.Result; 
import play.mvc.Action; 

public class TestAnnAction extends Action<TestAnn> { 
    @Override 
    public Result call(Http.Context ctx) throws Throwable 
    {  
     System.out.println("called"); 

     return null; 
    } 
} 

そしてApplication.scalaコントローラにこれを追加します。

package controllers 

import play.api._ 
import play.api.mvc._ 

import ann.TestAnn 

object Application extends Controller { 

    @TestAnn 
    def index = Action { 
    Ok(views.html.index("Your new application is ready.")) 
    } 

} 

それから、 "sbt run"でアプリケーションを実行しますが、要求インデックスページの後にターミナルで "called"という文字列が見られません。エラーも結果もありません。

私は間違っていますか?

アップデート:もし私がJavaコントローラを作成すると、すべて正常に動作します。 Application.java パッケージコントローラ。

import play.*; 
import play.mvc.*; 

import views.html.*; 

import ann.TestAnn; 

public class Application extends Controller { 

    @TestAnn 
    public static Result index() { 
    return ok(index.render("Your new application is ready.")); 
    } 
} 
+0

あなたはまだ解決しましたか? – angelokh

答えて

0

nullを返すだけでなく、delegate.call(ctx)を呼び出す必要があります。

public class TestAnnAction extends Action<TestAnn> { 
    @Override 
    public Result call(Http.Context ctx) throws Throwable 
    {  
     System.out.println("called"); 
     return delegate.call(ctx); 
    } 
}