我是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."));
}
}
答案 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);
}
}