2012-05-17 151 views
0

我在春季使用攔截器,我需要在所有控制器上實現一個攔截器,以在調用它們時處理特定的邏輯。Spring中的攔截器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> 

編輯:這裏有一個更好的例子。這一個使用價值標籤,而不是道具(無論哪種方式)。

<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「映射到bean名稱可以通過」mappings「屬性設置,在一個由java.util.Properties類接受的表單,如下所示: /welcome.html=ticketController /show.html=ticketController「 – acvcu

+0

非常感謝!!!!!! – Marta

0

您是否曾嘗試在攔截器中爲activeApp變量添加getter/setter方法。 (WarningInterceptor)

+0

)如果您查看WarningInterceptor類,則獲取並設置activeApp屬性 – Marta