1 自定義異常類 SystemException.java
public class SystemException extends RuntimeException{
//自定義key
private String key;
//自定義參數
private Object[] values;
//實現父類的構造方法
public SystemException() {
super();
}
public SystemException(String message, Throwable cause) {
super(message, cause);
}
public SystemException(String message) {
super(message);
}
public SystemException(Throwable cause) {
super(cause);
}
//自定義構造方法
public SystemException(String message, String key) {
super(message);
this.key=key;
}
//自定義構造方法,帶一個參數
public SystemException(String message, String key,Object value) {
super(message);
this.key=key;
this.values=new Object[]{value};
}
//自定義構造方法,帶多個參數
public SystemException(String message, String key,Object[] values) {
super(message);
this.key=key;
this.values=values;
}
//相應的get方法
public String getKey() {
return key;
}
public Object[] getValues() {
return values;
}
}
2 自定義異常處理器 SystemExceptionHandler.java
//作用:截獲SystemException,并根據SystemException中的信息動態創建ActionMessage等這些錯誤信息,
將其存在request中
public class SystemExceptionHandler extends ExceptionHandler{
/**
* 處理SystemException異常
*/
@Override
public ActionForward execute(Exception ex,//拋出的異常
ExceptionConfig config,//struts-config.xml中的配置信息
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws ServletException {
ActionForward forward=null;
//創建ActionForward
if(config.getPath()!=null){
//有path屬性,則根據path創建
forward=new ActionForward(config.getPath());
}else {
//沒有path屬性,則根據input屬性創建
forward=mapping.getInputForward();
}
if(ex instanceof SystemException){
SystemException se=(SystemException)ex;
//key可有可無,所以取出key進行判斷
String key=se.getKey();
ActionMessage error=null;
//如果自定義的key為空,用struts的
if(key==null){
//拿出error.default和message,創建ActionMessage對象
error=new ActionMessage(config.getKey(),se.getMessage());
}else {
//如果自定義的key有值
if(se.getValues()!=null){
error=new ActionMessage(key,se.getValues());
}else {
//如果自定義的key有值,則根據key創建ActionMessage對象
error=new ActionMessage(key);
}
}
//將這個ActionMessage放到request中。key為自定義的,error為ActionMessage對象
//forward是要轉到什么地方,根據path屬性創建。"request"為scope的一個,也可以
//用config.getScope()
this.storeException(request, key, error, forward, config.getScope());
return forward;
}
return super.execute(ex, config, mapping, form, request, response);
}
}
3 編寫配置文件 struts-config.xml
<global-exceptions>
<exception key="error.default"
type="java.lang.Exception"
scope="request"
path="/common/exception.jsp"
<!-- 自定義的異常處理類 -->
handler="org.oa.common.SystemExceptionHandler"/>
</global-exceptions>
4 編寫資源文件 ApplicationResources.properties
error.default={0}
error.org.del=Can't Del Orgnation,id is {0}!
5 業務代碼
throw new org.oa.common.SystemException("存在子機構,不允許刪除!","error.org.del",org.getOname());
posted on 2009-11-30 08:17
junly 閱讀(500)
評論(0) 編輯 收藏 所屬分類:
struts2/struts1.3/JSF