2016-01-25 2 views
1

У меня есть приложение Spring, которое предоставляет REST API через аннотацию @RestController, и это работает очень хорошо. Теперь я хочу интегрировать некоторый вид в свой проект, и я хочу использовать Apache Wicket, но у меня проблемы. Я создал WebApplication класс:Конфигурирование Apache Wicket весной MVC

public class WicketApp extends WebApplication { 

@Override 
protected void init() { 
    super.init(); 
    super.getComponentInstantiationListeners().add(new SpringComponentInjector(this)); 
} 

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

и файлы Index.java и index.html в той же папке.

Но это не работает, и у меня есть ошибка 404. Это мой файл web.xml:

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

<!-- The definition of the Root Spring Container shared by all Servlets 
    and Filters --> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring/root-context.xml</param-value> 
</context-param> 

<context-param> 
    <param-name>contextClass</param-name> 
    <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> 
</context-param> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>com.myapp.AppConfig</param-value> 
</context-param> 

<!-- Creates the Spring Container shared by all Servlets and Filters --> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<filter> 
    <filter-name>TestApplication</filter-name> 
    <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> 
    <init-param> 
     <param-name>applicationClassName</param-name> 
     <param-value>com.myapp.web.wicket.WicketApp</param-value> 
    </init-param> 
</filter> 

<!-- Processes application requests --> 
<servlet> 
    <servlet-name>appServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>appServlet</servlet-name> 
    <url-pattern>/ws/*</url-pattern> 
</servlet-mapping> 

<filter-mapping> 
    <filter-name>TestApplication</filter-name> 
    <url-pattern>/app/*</url-pattern> 
</filter-mapping> 

В моем файле конфигурации я добавил этот метод:

@Configuration 
    @EnableWebMvc 
    @EnableTransactionManagement 
    @ComponentScan({ "com.myapp.*" }) 
    @PropertySource(value = { "classpath:hibernate.properties" }) 
    public class AppConfig { 

     //other configurations   

     @Bean 
     public WicketApp application() { 
      return new WicketApp(); 
     } 

Я действительно не знаю, где проблема ...

Весенняя версия - 4.1.4 Версия Apache Wicket 7.1.0 Я использую Maven.

+0

Какой url дает 404? Ваша конфигурация выглядит хорошо. Ответ Михира также действителен, но не обязательно. Вы видите в своем журнале сообщение, которое Wicket запустила в режиме РАЗВИТИЯ? –

+0

/myapp/app/Index.html Я вижу сообщение – zuno

+0

Нет ничего, что можно было бы прослушать в "index.html". Вам нужно использовать '#mountPage (" index.html ", getHomePage())'. –

ответ

1

Wicket использует «/» в качестве точки подключения для домашней страницы. Если вы хотите дополнительно прослушивать «/index.html», вам необходимо явно установить его с помощью mountPage("index.html", getHomePage()).

1

Вы должны упомянуть конфигурацию Spring app в калибровочном фильтре, как показано ниже, вместо WicketApp.

 <filter-name>WicketFilter</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> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:/resources/applicationContext.xml</param-value> 
    </init-param> 
+0

Это не работает. Я добавил applicationFactoryClassName org.apache.wicket.spring.SpringWebApplicationFactory contextConfigLocation классам:/WEB-INF/весна/appServlet/servlet-context.xml zuno

+0

Можете ли вы попробовать с открытым классом WicketApp extends WebApplication реализует ApplicationCont extAware? – Mihir

+0

Оставьте I метод setApplicationContext (ApplicationContext applicationContext) пустым? – zuno

Смежные вопросы