1

我可以找出哪个控制器播放委托给哪个控制器吗?

在这种情况下:

public class Menus extends Action.Simple {

    public Result call(Http.Context ctx) throws Throwable {
        ctx.args.put("menus", Menu.find.all());
        return delegate.call(ctx);
    }

    public static List<Menu> current() {
        return (List<Menu>)Http.Context.current().args.get("menus");
    }
}

我可以在调用方法中找出将使用哪个控制器吗?

4

1 回答 1

1

您可以通过为您的动作组合编写自定义注释来做到这一点。请参阅下面文档页面上标记为定义自定义操作注释的部分。

http://www.playframework.com/documentation/2.1.1/JavaActionsComposition

基本上,在您的注释界面上,您将定义一个参数来记录控制器。也许只是一个简单的字符串,你传入控制器类名。

@With(MenusAction.class)
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Menus {
   String value();
}

当您注释控制器或操作方法时,您传入控制器名称值:

@Menus("MyController")
public static Result index() {
  return ok();
}

因此,现在在您的Action班级中,您可以读取值并执行您想做的任何逻辑。

public class MenusAction extends Action<Menus> {
  public Result call(Http.Context ctx) {
    if("MyController".equals(configuration.value)) {
      // do something
    }

    ctx.args.put("menus", Menu.find.all());
    return delegate.call(ctx);
  }
}
于 2013-04-26T20:28:45.850 回答