java - 如何向表单中注入(inject)内容

标签 java playframework playframework-2.4

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

我正在尝试在我的应用中使用 DI。我将我的 jpa 查找器从模型类上的静态方法移动到我注入(inject) Controller 的服务层中的方法。

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

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

似乎无法将某些东西注入(inject)到表单中,所以我该如何解决我的问题

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<Login> loginForm = form(Login.class).bindFromRequest();

        if (loginForm.hasErrors()) {
            return badRequest(login.render(loginForm));
        } else {
            Secured.setUsername(loginForm.get().email);
            return redirectConnected();
        }
    }
}

最佳答案

Play Framework 表单不是可注入(inject)的依赖项,并且具有与 userService 不同的范围,因此您不能通过注释将依赖项注入(inject)登录表单。试试这个:

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

关于java - 如何向表单中注入(inject)内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30577431/

相关文章:

子项目 Play 2.4 中的 Ebean 增强

java - 键入时如何正确删除自动添加的右括号

java - maven-jar-plugin 与 maven-source-plugin 不起作用

Java - 迭代 HashMap 替换 ArrayList

java - 使用通配符 '*' 匹配 application.conf 中的任何内容 Play 应用程序

scala - 如何在scala play框架wsclient中发送-k或忽略证书验证?

java - Play Framework 2.4 docker镜像运行错误

java - 首先对自定义字符串进行排序

Junit中eclipse中的Java play框架错误

mysql - Play无法连接MySQL