创建新的应用程序后,注释不起作用

时间:2012-03-30 15:22:07

标签: annotations playframework-2.0

我是Play和Scala / Java的新手。

我从typesafe.com安装typesafe-stack并为测试创建新项目:g8 typesafehub / play-scala 在我创建Java注释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”运行应用程序,但是在请求索引页之后我没有在终端中看到字符串“被叫”。没有错误也没有结果。

我做错了什么?

更新:如果我创建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."));
  }
}

1 个答案:

答案 0 :(得分:0)

你应该调用delegate.call(ctx)而不是只返回null。

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