после создания нового приложения аннотации не работает - PullRequest
1 голос
/ 30 марта 2012

Я новичок в Play и Scala / Java.

Я устанавливаю стек typesafe с typesafe.com и создаю новый проект для теста: 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запустить ", но я не вижу строку" звонил "в терминале после страницы индекса запроса.Нет ошибок и нет результатов.

Что я делаю не так?

Обновление: если я создаю контроллер 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 голосов
/ 01 июня 2012

Вы должны вызвать делегат.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);
    }
}
...