【问题标题】:How to autowire Spring bean in Wicket Session class?如何在 Wicket Session 类中自动装配 Spring bean?
【发布时间】:2017-02-24 14:59:21
【问题描述】:

我有一个 Wicket Session 类如下

public class IASession extends AuthenticatedWebSession {
    private static final long serialVersionUID = 3529263965780210677L;

    @SpringBean
    private UserService userService;

    public IASession(Request request) {
        super(request);
    }

    @Override
    public boolean authenticate(String username, String password) {

        // Get the user
        UserDetailsDTO user = userService.findByEmail(username);

        if(null != user && user.getPassword().equals(password))
            return true;
        else
            return false;
    }

    @Override
    public Roles getRoles() {
        Roles roles = new Roles();
        roles.add("SIGNED_IN");
        return roles;
    }
}

在本课程中,我正在尝试使用 wicket-spring 注释 @SpringBean 自动装配 Spring 服务。但是当我尝试登录时,它给了我错误。

Last cause: null
WicketMessage: Method onFormSubmitted of interface org.apache.wicket.markup.html.form.IFormSubmitListener targeted at [StatelessForm [Component id = login-form]] on component [StatelessForm [Component id = login-form]] threw an exception

Wicket 无法自动装配 userService spring bean,这就是为什么它是 null

我能做些什么来解决这个问题?

【问题讨论】:

  • 我以前没有使用过 Wicket,但是 IASession 在 Spring 应用程序上下文中是否可见?我没有在此类上看到任何表明它是的注释。如果你的目标类不是由 Spring 管理的,你就不能在其中自动装配任何东西。另外,你的UserService是不是也被Spring管理了?

标签: java spring wicket


【解决方案1】:

由于会话不是组件或行为,您必须覆盖构造函数并调用 Injector.get.inject(this)。请参阅SpringComponentInjector 文档。

    public IASession(Request request) {
       super(request);
       Injector.get().inject(this);
    }

【讨论】:

  • 您似乎有使用 Spring 的 Wicket 的经验。如果您知道 Wicket + Spring 的任何参考站点,请告诉我。谢谢,它确实解决了我的问题:)
猜你喜欢
  • 2022-08-20
  • 1970-01-01
  • 2022-01-24
  • 2022-09-23
  • 2020-11-19
  • 2012-08-11
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多