天天看點

struts2 velocity 異常處理流程

一般的struts2異常處理流程分為

1.action抛出的異常

2.action傳回error

針對這兩種異常,我們通過message檔案同一定義異常,在程式中傳回異常編碼,流程如下:

1.定義異常屬性檔案XXX.properties

shop.shopaction.error.editshopinfo = 店鋪名稱或域名已存在,修改失敗!

shop.vendershopaction.exist.error=店鋪不存在

shop.vendershopaction.banner.error=banner圖檔類型或大小錯誤

shop.vendershopaction.logo.error=logo圖檔類型或大小錯誤

shop.vendershopaction.venderorshop.error=商家或店鋪已停用
           

2.定義struts.xml。 屬性檔案的引用、全局異常的定義

<constant name="struts.custom.i18n.resources" value="message/message"/>
           
<global-results>
            <result name="exception">/WEB-INF/vm/error.vm</result>
            <result name="error">/WEB-INF/vm/error.vm</result>
        </global-results>
           
<global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="exception"/>
        </global-exception-mappings>
           

 3.定義velocity.properties

tools.view.servlet.layout.directory=/WEB-INF/vm/layout/
tools.view.servlet.error.template=/WEB-INF/vm/error.vm
tools.view.servlet.layout.default.template=default.vm
velocimacro.library=/WEB-INF/vm/macro.vm
input.encoding=gbk
output.encoding=gbk
runtime.log.logsystem.class=org.springframework.ui.velocity.CommonsLoggingLogSystem
           

4.編寫error.vm

#* @vtlvariable name="exception" type="java.lang.Exception" *#
#* @vtlvariable name="result" type="com.jd.common.web.result.Result" *#
#if($exception)
    #if($!exception.class.simpleName=="NoSuchMethodException")
        $!response.setStatus(404)
        404! 您請求的内容不存在
    #else
        出錯了:  $exception.message
    #end
#elseif($result)
    #if($result.resultCode)
        #showSimpleError()    
    #else
        系統錯誤
    #end
#end
           

5.編寫macro.vm(引用的showSimpleError() 方法)

#* @vtlvariable name="module" type="com.jd.common.web.url.JdUrl" *#
#* @vtlvariable name="page" type="com.jd.common.util.base.PaginatedArrayList" *#


#macro(showSimpleError)
    #if(!$!actionErrors.empty)
        #foreach($str in $actionErrors)
            $!str
            #break
        #end
    #end
#end
           

6.

a.action中抛出異常時,struts捕獲異常,跳入error.vm中,顯示相應内容

b.action傳回error時:

String text = getText("shop.shopaction.error.editshopinfo");//店鋪名稱或域名已存在,修改失敗!

 addActionError(text);
           

  最後在頁面顯示處調用宏方法

#showSimpleError()
           

至此,struts2整合velocity的異常處理流程就結束了,關鍵還是在于對于異常的定義,以及程式中異常處理的方法,每個團隊都有自己的一套流程,在此就不再讨論!下面有個例子,感興趣的可以下載下傳試試,jar包主要就是struts2,和velocity的