首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache Wicket:在表单验证器中注入依赖项(使用Guice)

Apache Wicket:在表单验证器中注入依赖项(使用Guice)
EN

Stack Overflow用户
提问于 2013-06-25 05:19:12
回答 1查看 304关注 0票数 1

(这基本上是this question的后续版本。)

我需要在我的一个表单验证器中访问DB服务层(以确保在注册新用户时没有收到电子邮件)。

我尝试了以下方法(为简洁起见,省略了一些输入字段):

代码语言:javascript
复制
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);
    }
}

不幸的是,这可能会导致

代码语言:javascript
复制
java.lang.IllegalStateException: EntityManager is closed

我怀疑这个问题是因为我使用的是open-session-in-view,并且多个表单提交跨越了几个请求。userService被注入到第一个请求中,并在后续请求中(非法)重用。(如果验证失败,并且用户尝试再次提交表单,则会出现多个表单提交。)

我的问题

解决这个问题的最好方法是什么?就像我解决前一个问题一样,similar problem?在这种情况下,它无疑会变得更加混乱。

EN

回答 1

Stack Overflow用户

发布于 2013-06-26 00:00:58

您想要的和wicket使用的生命周期略有不同。

首先,首先要了解Wicket组件的实例化和注入:

使用组件注入器实例component

  • Invoke注释器- IComponentInstantionListener.onInstantiation(Component component)

  • Inject带注释的字段

  • 使用组件(渲染等)

  • 下一个请求-对注入的字段使用相同的组件

该怎么办呢?使用注入到字段中的代理类。当代理类被调用时,它总是使用当前的bean。

请访问http://ci.apache.org/projects/wicket/apidocs/6.0.x/org/apache/wicket/spring/injection/annot/SpringComponentInjector.html查看SprinComponentInejctor

请访问http://ci.apache.org/projects/wicket/apidocs/6.0.x/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactory.html查看AnnotProxyFieldValueFactory

甚至你也必须编写自己的实现,或者寻找Wicket Contrib或Wicket之类的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17285304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档