2012-03-30 4 views
1

Play 및 Scala/Java의 새로운 기능입니다. 이 작동하지 않습니다.

나는 typesafe.com에서 형태 보증 된 스택을 설치하고 테스트를 위해 새 프로젝트를 만들 : G8 typesafehub/I는 자바 주석 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); 
    } 
} 
관련 문제