2012-05-17 3 views
0

Я пытаюсь использовать перехватчики весной, мне нужно реализовать перехватчик на всех моих контроллерах, чтобы обрабатывать определенную логику, когда их вызывают.Перехватчики весной 2.5

web.xml:

<servlet> 
    <servlet-name>MyApp</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>MyApp</servlet-name> 
    <url-pattern>*.do</url-pattern> 
</servlet-mapping> 

applicationContext.xml:

<bean id="handlerMapping" 
     class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="interceptors"> 
     <list> 
      <ref bean="warningInterceptor"/> 
     </list> 
    </property> 
    <property name="mappings"> 
     <value>*.do</value> 
    </property> 
</bean> 

<bean id="warningInterceptor" class="security.WarningInterceptor"> 
    <property name="activeApp" value="${myWarning}"/> 
</bean> 

Java класс: WarningInterceptor

public class WarningInterceptor extends HandlerInterceptorAdapter { 

private int activeApp; 
public int getActiveApp() { return activeApp; } 
public void setActiveApp(int activeApp) {this.activeApp = activeApp;} 

public boolean preHandle(
     HttpServletRequest request, 
     HttpServletResponse response, 
     Object handler) throws Exception { 

    if (getActiveApp() == 0) { 
     return true; 
    } else { 
     response.sendRedirect("/myWarning.do"); 
     return false; 
    } 
} 

Когда я начинаю MyApp я всегда получаю эту ошибку:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'handlerMapping' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '' is defined

+1

Я не вижу ничего плохого в этом. попробуйте ли вы очистить и перестроить весь проект? – gigadot

+0

Да, я думаю, что связано со значением «* .do» в сопоставлениях, но я не знаю, что произойдет :-( – Marta

ответ

1

Свойство сопоставления SimpleUrlHandlerMapping должно отображать URL-адреса обработчикам, и у вас есть только шаблон URL. Это должно быть примерно так:

<property name="mappings"> 
    <props> 
     <prop key="*.do">myAppController</prop> 
    </props> 
    </property> 

EDIT: Вот лучший пример. Этот использует тег значения вместо prop (в любом случае работает).

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
    <value> 
     *.do=myAppController 
    </value> 
    </property> 
</bean> 

<bean id="myAppController" 
    class="com.example.MyAppController" /> 
+0

Также посмотрите на странице http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/servlet/handler/SimpleUrlHandlerMapping.html. «Сопоставление имен бинов может быть установлено с помощью свойства« сопоставления »в форма, принятая классом java.util.Properties, например: /welcome.html=ticketController /show.html=ticketController " – acvcu

+0

Отлично, спасибо !!!!!! – Marta

0

Вы пробовали с добавлением методов getter/setter для переменной activeApp в вашем перехватчике. (WarningInterceptor)

+0

Если вы посмотрите на класс WarningInterceptor, то получите и установите для свойства activeApp – Marta

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