我想实现一个 setUserIfPresent() 方法,将用户对象放入上下文中,例如 Http.Context.current()。 args.put("用户", 用户);
此方法应在每个 Controller 方法之前应用,以便 View 可以隐式访问用户。
在 Play1 中,我创建了一个BaseController,它调用此方法之前所有请求(@Before 过滤器)和从这个 Controller 扩展所有其他 Controller 。
如何使用 Java API 在 play2 中实现这样的功能?
似乎有一些东西适用于 Scala 而不是适用于 Java? http://www.playframework.com/documentation/2.2.x/ScalaHttpFilters
干杯
最佳答案
虽然您可以以“传统”webapp 框架方式使用过滤器(or Interceptors),但 Play 首选方式似乎肯定是编写自定义 Action
方法;请参阅 Action Composition 上的文档.
如果您遵循他们的风格,您将定义一个新的 Action
实现,如下所示:
public class UserContextInjectingAction extends play.mvc.Action.Simple {
public F.Promise<SimpleResult> call(Http.Context ctx) throws Throwable {
Logger.info("Injecting user data into context " + ctx);
injectUser(ctx); // Written by you
return delegate.call(ctx);
}
}
你最终会得到如下所示的 Controller 代码:
@With(UserContextInjectingAction.class)
public static Result showHomePage() {
return ok("Welcome");
}
关于java - Play 2.2.1 Java : Whats the equivalent of @before filters from play 1. X?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20072380/