如何将某些东西注入表单中

从2.4.0开始,我们可以使用DI框架。

我想在我的应用程序中使用DI。 我将jpa finders从我的模型类中的静态方法移动到我注入到控制器中的服务层中的方法。

我的主要问题是我有一些带有validation方法的表单,在我的validation方法中,我使用了一些查找程序。

例如,在登录表单中,我使用“User.authenticate”方法。 现在我已经将这个静态方法替换为我的UserSvc上的新方法,我想将我的服务注入到我的表单中,但它不起作用。

似乎不可能在表单中注入一些内容,以便如何解决我的问题

public class MyController { // Inject here can be used in controller methods but not in the form validate method @Inject UserSvc userSvc; public static class Login { // Inject here is not filled : NPE @Inject UserSvc userSvc; public String email; public String password; public String validate() { // How can I use userSvc here ? } } @Transactional(readOnly = true) public Result authenticate() { Form loginForm = form(Login.class).bindFromRequest(); if (loginForm.hasErrors()) { return badRequest(login.render(loginForm)); } else { Secured.setUsername(loginForm.get().email); return redirectConnected(); } } } 

Play Framework表单不是dependency injection,并且具有与userService不同的范围,因此您无法通过注释将依赖项注入Login表单。 尝试这个:

 public String validate() { UserSvc userSvc = Play.application().injector().instanceOf(UserSvc.class); }