2013-04-25 89 views
-3

沒有爲動作名稱index映射的操作。如何捕捉異常,因爲我想定義我的處理。如何在Struts 2中捕獲默認攔截器堆棧拋出的異常?

com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:189) 
    org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61) 
    org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) 
    com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) 
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:475) 
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129) 
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:82) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    com.zhanxiao.sys.PermissionFilter.doFilter(PermissionFilter.java:61) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    org.apache.coyote.http11.AbstractHttp11Processor.proces 
+0

請更具體一點。 – NilsH 2013-04-25 11:47:46

+0

@NilsH我認爲OP具有特定的標題,並且更具體地發佈了堆棧跟蹤。 – 2013-04-25 12:22:10

+1

那麼,很高興知道有人得到它然後:) – NilsH 2013-04-25 12:23:58

回答

1

由於與請求一起使用的URL未正確映射到操作配置,因此引發了異常。爲了擺脫異常,您應該正確地將URL映射到操作,或者使用缺省操作引用,如果沒有找到給定URL的操作,將會調用默認操作引用。

即使使用正則表達式模式匹配器,您也可以使用通配符映射來映射一堆URL,這會找到您的動作,或者它無法通過提供您的自定義實現來覆蓋動作映射器的默認行爲。

要處理您的動作代碼的異常,您可以在動作堆棧中使用exception interceptor。它將幫助您通過全局異常映射處理哪種異常,並定義實際處理異常的全局結果。請參閱詳細說明以及示例如何使用異常處理來製作默認包的鏈接。

有一個選項可以擴展攔截器並覆蓋異常處理機制,如文檔中所述。

+0

感謝您的回答。 – Chd 2013-04-26 02:29:20

+0

你應該接受這個答案 – 2017-11-03 12:36:15