На моей странице Wicket у меня есть:
@SpringBean
protected J2EContext j2EContext;
В конфигурации у меня есть:
@Bean
@RequestScope
public J2EContext getWebContext() {
return new J2EContext(request, response, getSessionStore());
}
@Bean
public RequestContextListener requestContextListener() {
return new RequestContextListener();
}
приложение запускается нормально, но когда я перехожу на домашнюю страницу, я получаю исключение:
Caused by: java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
at net.sf.cglib.proxy.Enhancer.emitConstructors(Enhancer.java:931)
at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:631)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:
329)
at net.sf.cglib.proxy.Enhancer.generate(Enhancer.java:492)
at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:93)
at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91)
at net.sf.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
когда калитка хочет ввести J2EContext боб. Я думаю, это потому, что страница рендерится до того, как @RequestScope создаст этот bean-компонент. Любая идея, как решить эту проблему?




для внедрения bean-компонентов Wicket создает прокси двумя разными способами:
К сожалению, cglib не может создавать прокси для классов без конструктора по умолчанию. Однако есть и третий способ, который может решить проблему. Просто добавьте objenesis в качестве зависимости к вашему проекту, и Wicket будет использовать его вместо cglib.
да, это безопасно, Wicket автоматически проверяет, доступен ли objenesis, и если да, то использует его вместо cglib.
приятно, это работает как шарм. Это также решение для сохранения? Надеюсь, я не сломаю какую-нибудь функцию калитки.