java - 启动 Web 应用程序时出现 IllegalStateException - Spring + Wicket

标签 java spring tomcat wicket

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

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(未知来源)

这是我的 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:

公共(public)类 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 使用这个类:

公共(public)类 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/security http://www.springframework.org/schema/security/spring-security-3.0.xsd ">

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

谢谢!

最佳答案

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

关于java - 启动 Web 应用程序时出现 IllegalStateException - Spring + Wicket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34143184/

相关文章:

java - Maven,本地目录的相对路径

java - 如何将重复值列表转换为 T 类字段的不同值列表

java - MongoDB,2 个查询的公共(public)部分

java - Spring Boot 优雅关机

java - 为什么我不能在 web.xml 中编辑 servlet 名称?

java - 通过 tomcat 部署 Drools 失败

java - Spring MVC "Request processing failed"500 错误

java - 为什么分配单个 2D 数组比循环分配多个总大小和形状相同的 1D 数组花费的时间更长?

java - 如何配置要使用的事务管理器而不必覆盖所有@Transactional 方法

java - 如何将带有gradle的源代码热部署到tomcat7中?