隨筆-124  評論-49  文章-56  trackbacks-0

          一 配置異常(在struts-config.xml文件中定義),定制異常有兩種:
          1 全局異常(Global Exceptions)
          <global-exceptions>
           <exception key="invalideUser"
           path="/Login.jsp" type="com.future.struts.MyException" />
          </global-exceptions>
          2 局部異常(Local Exception)
          <action-mappings>
            <action attribute="loginForm" name="loginForm"
             path="/loginAction(出錯轉向的路徑)" scope="request"
             input="/login.jsp"http://異常轉向的頁面,同exception中的path,優先級path高于input
            />
            <exception key="invalideUser(異常信息的key)" path="/Error.jsp"
            type="cn.itcast.ItcastException(異常類全名)" />
          </action-mappings>
           path:出現異常后跳轉的頁面
           key:異常信息的鍵,對應的值在資源文件當中
           type:所要處理的異常類
          二 在相應的action中的execute方法中拋出異常
          三 在異常處理頁面(path所指的頁面)使用html:errors標簽打印異常信息
          1 建立資源文件ApplicationResources.properties
          內容:invaliduser=it is an invalid user(key/value)
          2 配置struts-config.xml文件
            <message-resources parameter="cn.itcast.ApplicationResources" key="invalideuser"/>
          3 使用html:errors標記打印信息
            <html:errors />
            --------------------------------------------
          1 編程式異常
            * 截獲異常
            * 創建相應的異常消息
            * 傳遞異常消息
            * 轉向相應的頁面處理異常
          2 聲明式異常(自動處理的異常)
            * 在struts-config.xml文件中配置<exeception/>標簽
            * 理解局部和全局exception
            * 注意局部<exception/>標簽需要配置到<forward/>標簽的前面
           
            <exeception/>標簽中的屬性說明:
                * key:指異常信息對應的國際化消息文本,這個key值需要在國際化資源文件中定義
                * type:處理那種異常
                * path:定義一但出現異常,需要轉向那個頁面,如果不定義path,
                       默認情況下將使用<action>標簽中input屬性對應的頁面
                * scope:可以取值request和session,默認為request
                * handler:導常的處理類,struts默認采用org.apache.struts.action.ExceptionHandler,
                          如果做個性化的異常處理可以繼承此類復寫相應的方法
          -------------------------------------------------------------------------
          個性異常類定義
          一 方法:
          1 定義MessageResources.propertices資源文件
          2 在struts-config中配置<exception/>
            <exception key="error.exception" type="com.bjsxt.struts.ErrorCodeException"
             handler="com.bjsxt.struts.ErrorCodeException" />
          3 編寫異常類ErrorCodeException繼承RuntimeException
          public class ErrorCodeException extends RuntimeException {
           private String errorCode;//這是key對應的值
           private Object[] args;//這是參數集合
           public ErrorCodeException(String errorCode){
            this(errorCode,null);
           }
           public ErrorCodeException(String errorCode,Object args0){
            this(errorCode,new Object[]{args0});
           }
           public ErrorCodeException(String errorCode,Object[] args){
            this.errorCode=errorCode;
            this.args=args;
           }
           public String getErrorCode() {
            return errorCode;
           }
           public Object[] getArgs() {
            return args;
           }
          }
          4 編寫ErrorCodeExceptionHandler類繼承ExceptionHandler,
            復寫public ActionForward execute(Exception ex, ExceptionConfig ae,
                   ActionMapping mapping, ActionForm formInstance,
                   HttpServletRequest request, HttpServletResponse response)
                   throws ServletException{}方法:
          public ActionForward execute(Exception ex, ExceptionConfig ae,
                   ActionMapping mapping, ActionForm formInstance,
                   HttpServletRequest request, HttpServletResponse response)
                   throws ServletException {
                   //添加判斷
                 ------------------------------------------------------------
                if(!(ex instanceof ErrorCodeException)){
                 return super.execute(ex, ae, mapping, formInstance, request, response);
                }
                ------------------------------------------------------------
                   ActionForward forward;
                   ActionMessage error;
                   String property;

                   // Build the forward from the exception mapping if it exists
                   // or from the form input
                   if (ae.getPath() != null) {
                       forward = new ActionForward(ae.getPath());
                   } else {
                       forward = mapping.getInputForward();
                   }

                   // Figure out the error
                   if (ex instanceof ModuleException) {
                       error = ((ModuleException) ex).getActionMessage();
                       property = ((ModuleException) ex).getProperty();
                   } else {
                    //改修這個地方
                    //----------------------------------------------
                    ErrorCodeException ece=(ErrorCodeException)ex;
                    String errorCode=ece.getErrorCode();
                    Object[] args=ece.getArgs();
                    error = new ActionMessage(errorCode, args);
                    property = error.getKey();
                    //------------------------------------------------
                       //error = new ActionMessage(ae.getKey(), ex.getMessage());
                       //property = error.getKey();
                   }

                   this.logException(ex);

                   // Store the exception
                   request.setAttribute(Globals.EXCEPTION_KEY, ex);
                   this.storeException(request, property, error, forward, ae.getScope());

                   if (!response.isCommitted()) {
                       return forward;
                   }
                   return null;
               }
          }
          5 頁面直接拋出異常
          public void login(String username,String password){
            if(!"admin".equals(username)){
              throw new ErrorCodeException("user.not.found",username,age);
            }
          }
          ---------------------------------------------------------------------
          二 方法:
          1 定義MessageResources.propertices資源文件
            內容:error.exception={0}
          2 在struts-config中配置<exception/>
            <exception key="error.exception" type="com.bjsxt.struts.ErrorCodeException"/>
          3 編寫異常類ErrorCodeException繼承RuntimeException
          public class ErrorCodeException extends RuntimeException {
            public ErrorCodeException(String msg){
              super(msg);
            }
          }
          4 頁面直接拋出異常
          public void login(String username,String password){
            if(!"admin".equals(username)){
              throw new ErrorCodeException("名稱"+usrname+"錯誤!");
            }
          }


          --------------------------------------------------------------------------
          1 ApplicationResources.properties文件
             num2Meg=is not a double
          2 struts-config.xml
             <message-resources parameter="ApplicationResources" />
          3 ActionMessages errs=new ActionMessages();
          errs.add("num1Error",new ActionMessage("num2Meg"));
          //errs.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("num2Meg"));


          this.saveErrors(request,errs);

          頁面
          <html:errors property="num1Error"/>
          //<html:errors/>//全局不能指定property
          errs.header="<script>alert("
          errs.footer=")</script>"

          posted on 2009-11-30 08:11 junly 閱讀(500) 評論(0)  編輯  收藏 所屬分類: struts2/struts1.3/JSF
          主站蜘蛛池模板: 惠来县| 溆浦县| 安泽县| 齐齐哈尔市| 乐都县| 马鞍山市| 滦南县| 拉孜县| 姚安县| 关岭| 天气| 喀什市| 杂多县| 当雄县| 宁南县| 宜黄县| 阜城县| 札达县| 百色市| 锡林郭勒盟| 奉新县| 旅游| 天峨县| 石楼县| 弥勒县| 常熟市| 南宁市| 盐池县| 青冈县| 大竹县| 清河县| 通许县| 望谟县| 麻阳| 临泉县| 永福县| 涟源市| 丰都县| 若尔盖县| 环江| 昭通市|