论坛首页 Java企业应用论坛

struts2 velocity 异常处理流程

浏览 3168 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-09-07   最后修改:2010-09-07

一般的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的

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics