(这基本上是一个跟随这个问题 。)
我需要在我的表单验证的一个访问数据库服务层(以确保电子邮件注册新用户时,不已经采取)。
我尝试以下(一些为简洁起见省略输入字段):
public class RegistrationPage extends WebPage {
@Inject
private UserService userService;
public RegistrationPage() {
add(new FeedbackPanel("feedback"));
TextField<String> email = new TextField<String>("email", Model.of(""));
...
email.add(new IValidator<String>() {
@Override
public void validate(IValidatable<String> validatable) {
String email = validatable.getValue();
if (userService.findUserByEmail(email) != null) {
// report error...
}
}
});
Form<?> form = new Form<Void>("registrationForm") { ... };
form.add(email);
add(form);
}
}
这不幸导致
java.lang.IllegalStateException: EntityManager is closed
我怀疑,这个问题是由于我使用的开放式会话中的视图和多形式,提交跨越多个请求。 所述userService
注入用于所述第一请求和(非法)在随后的请求重复使用。 (多表单提交如果验证失败,用户试图再次提交形式发生。)
我的问题
什么是解决这个的最好方法? 用同样的方法为我解决了以前, 类似的问题 ? 毫无疑问,这将得到梅西耶在这种情况下。