如何向表单中注入内容
How to inject something into a form
玩2.4.0后,可以使用DI框架了
我正在尝试在我的应用程序中使用 DI。我将我的 jpa 查找器从我模型上的静态方法 类 移动到我注入控制器的服务层中的方法。
我的主要问题是我有一些带有验证方法的表单,在我的验证方法中我使用了一些查找器。
例如,在登录表单中,我使用了 "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<Login> loginForm = form(Login.class).bindFromRequest();
if (loginForm.hasErrors()) {
return badRequest(login.render(loginForm));
} else {
Secured.setUsername(loginForm.get().email);
return redirectConnected();
}
}
}
Play Framework
表单不是可注入的依赖项,并且具有与 userService
不同的范围,因此您不能通过注释将依赖项注入到登录表单中。试试这个:
public String validate() {
UserSvc userSvc = Play.application().injector().instanceOf(UserSvc.class);
}
玩2.4.0后,可以使用DI框架了
我正在尝试在我的应用程序中使用 DI。我将我的 jpa 查找器从我模型上的静态方法 类 移动到我注入控制器的服务层中的方法。
我的主要问题是我有一些带有验证方法的表单,在我的验证方法中我使用了一些查找器。
例如,在登录表单中,我使用了 "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<Login> loginForm = form(Login.class).bindFromRequest();
if (loginForm.hasErrors()) {
return badRequest(login.render(loginForm));
} else {
Secured.setUsername(loginForm.get().email);
return redirectConnected();
}
}
}
Play Framework
表单不是可注入的依赖项,并且具有与 userService
不同的范围,因此您不能通过注释将依赖项注入到登录表单中。试试这个:
public String validate() {
UserSvc userSvc = Play.application().injector().instanceOf(UserSvc.class);
}