3

私のweb.xmlには、これがあります:

 <error-page>  
       <exception-type>java.lang.Throwable</exception-type>  
       <location>/error.do</location>   
 </error-page>  
 <error-page>  
       <exception-type>org.apache.struts.chain.commands.UnauthorizedActionException</exception-type>  
       <location>/unauthorized.do</location>  
  </error-page>  

問題は、UnauthorizedActionException が発生した場合、呼び出されるアクションが「error.do」(Throwable アクション) であることです。Throwable にコメントすると、UnauthorizedActionException が発生した場合、アクションは問題ありませんが、throwable を配置すると、間違ったアクションになります。誰でも私を助けることができますか?

4

1 に答える 1

1

UnauthorizedActionExceptionから継承するjava.lang.Throwableため、最初のエラーページ定義で処理することが有効になります。

定義を並べ替えてみてください...

 <error-page>  
       <exception-type>org.apache.struts.chain.commands.UnauthorizedActionException</exception-type>  
       <location>/unauthorized.do</location>  
  </error-page> 
 <error-page>  
       <exception-type>java.lang.Throwable</exception-type>  
       <location>/error.do</location>   
 </error-page>  

コメントに続いて[編集]

次に、これらのエントリをweb.xmlから削除し、代わりにstruts-config.xmlで例外ハンドラーを構成することをお勧めします。グローバルスコープで例外ハンドラーを定義することで逃げることができます。このようなもの ...

<global-results>
    <result name="login" type="redirect">/Login.action</result>
    <result name="Exception">/Exception.jsp</result>
    <result name="UnauthorizedActionException">/UnauthorizedActionException.jsp</result>
</global-results>

<global-exception-mappings>
    <exception-mapping exception="org.apache.struts.chain.commands.UnauthorizedActionException" result="UnauthorizedActionException"/>
    <exception-mapping exception="java.lang.Exception" result="Exception"/>
</global-exception-mappings>
于 2012-08-28T13:18:01.560 に答える