【问题标题】:IllegalStateException while starting up web app - Spring + Wicket启动 Web 应用程序时出现 IllegalStateException - Spring + Wicket
【发布时间】:2016-03-12 14:57:26
【问题描述】:

我正在尝试使用 Tomcat 7 运行我的 webapp,但我遇到了这个异常:

GRAVE:Excepción arrancando filtro wicket.filter java.lang.IllegalStateException:找不到 [org.apache.wicket.protocol.http.WebApplication] 类型的 bean 在 org.apache.wicket.spring.SpringWebApplicationFactory.createApplication(SpringWebApplicationFactory.java:160) 在 org.apache.wicket.spring.SpringWebApplicationFactory.createApplication(SpringWebApplicationFactory.java:139) 在 org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:308) 在 org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:286) 在 org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279) 在 org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260) 在 org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:105) 在 org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4841) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5535) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1574) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1564) 在 java.util.concurrent.FutureTask.run(未知来源) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(Unknown Source)

这是我的 web.xml:

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 版本="2.4">

<display-name>Archetype Created Web Application</display-name>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>       
        classpath:*/META-INF/persistence-context.xml,
        classpath:*/META-INF/service-context.xml,
        classpath:*/META-INF/web-context.xml
    </param-value>
</context-param>

<context-param>
    <param-name>configuration</param-name>
    <param-value>development</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<filter>
    <filter-name>wicket.filter</filter-name>
    <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
    <init-param>
        <param-name>applicationFactoryClassName</param-name>
        <param-value>org.apache.wicket.spring.SpringWebApplicationFactory</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>wicket.filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>

<session-config>
    <session-timeout>7200</session-timeout>
</session-config>

唯一使用 WebApplication 的类是我的类 MounterURL:

公共类 MounterURL {

private WebApplication webApplication;

public MounterURL(final WebApplication webApplication) {
    this.webApplication = webApplication;
}

/**
 * @param mountPath
 *            Mount path (not empty)
 * @param pageClass
 *            Class of mounted page (not null)
 * @param parameters
 *            The parameter names (not null)
 */
public void mount(final String mountPath,final Class<? extends WebPage> pageClass, final String... parameters) {
    webApplication.mountPage(mountPath, pageClass);
}

这个类被 MyApplication 使用:

公共类 MyApplication 扩展 AuthenticatedWebApplication{

private MounterURL aMounterURL;

private GeneralService generalService;

@Override
protected Class<? extends AbstractAuthenticatedWebSession> getWebSessionClass() {
     return WebSession.class;
}

@Override
public Class<? extends Page> getHomePage() {
     return Home.class;
}

public String getContextPath() {
    return this.getServletContext().getContextPath();
}

@Override
public void init() {
    **aMounterURL = new MounterURL(this);**

    this.getComponentInstantiationListeners().add(new SpringComponentInjector(this));

    this.mountUrl("home", Home.class, "");
}

private void mountUrl(final String mountPath, final Class<? extends WebPage> pageClass, final String... parameters) {
    aMounterURL.mount(mountPath, pageClass, parameters);
}

这个类是在web.context.xml中创建的

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/securityhttp://www.springframework.org/schema/security/spring-security-3.0.xsd">

<bean id="wicketApplication" class="home.MyApplication">
    <property name="generalService" ref="services.general"></property>
</bean>

谢谢!

【问题讨论】:

    标签: java spring tomcat wicket


    【解决方案1】:

    您似乎缺少 WebApplication 类型的 bean。您是否扩展了 Wickets WebApplication 类并将其添加为 bean。例如使用@Configuration?

    【讨论】:

    • 我唯一的类是公共类 MyApplication extends AuthenticatedWebApplication
    • 如果你想使用applicationFactoryClassName=SpringWebApplicationFactory,你必须把它作为一个bean添加到Spring上下文中。
    • 已经添加了 在 web-context.xml 和 web.xml 中调用它
    • 我试过这个 applicationFactoryClassNamehome.MyApplication 但是一样的
    • 如果你不想在 spring 和 wicket 的配置问题上浪费时间,你应该看看:goo.gl/sy2G62
    猜你喜欢
    • 2020-08-16
    • 2015-06-09
    • 1970-01-01
    • 2017-07-24
    • 2017-11-19
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多