熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Struts2中action和field級別錯誤處理

2013-11-23 20:48:02  來源: Java開源技術 

  在struts一般的action都繼承ActionSupport這個類可以重寫public void validate()來進行數據校驗對應提示信息來說一般有兩個比較常用的方法就是thisaddFieldError(field nameerror message 和 thisaddActionError(error message兩個方法

  由於在ActionSupport這個類實現了ValidationAware接口接口裡面聲明了這兩個方法

public void addActionError(String anErrorMessage) {
        validationAwareaddActionError(anErrorMessage);
    }

    public void addActionMessage(String aMessage) {
        validationAwareaddActionMessage(aMessage);
    }

  而ValidationAwareSupport實現了ValidationAware接口通過查看ValidationAwareSupport源碼中的兩個錯誤提示方法

    private Collection actionErrors

    private Map fieldErrors

 public synchronized void addFieldError(String fieldName String errorMessage) {
         final Map errors = internalGetFieldErrors();
         List thisFieldErrors = (List) errorsget(fieldName);
 
         if (thisFieldErrors == null) {
             thisFieldErrors = new ArrayList();
             errorsput(fieldName thisFieldErrors);
         }
 
        thisFieldErrorsadd(errorMessage);
    }

public synchronized void addActionError(String anErrorMessage) {
        internalGetActionErrors()add(anErrorMessage);
    }

  注由於fielderrors級別是Map類型所以thisaddFieldError(field nameerror message 而actionerror級別是Collection級別所以thisaddActionError(error message

  在實際的項目開發應用中如果同時用到field和action錯誤級別的時候在jsp頁面中的表單有用到struts的標簽來實現的話就有可能對於同一個表單既有filed級別error提示又有action級別的error提示這時可以根據項目的實際需要來取捨但是如果兩個都要同時存在的時候只顯示action級別的error而不顯示field級別的action由於struts標簽默認就是顯示field級別的error所以要修改模板加入theme=simple即可這時struts表單那標簽默認的顯示field錯誤提示失效使用這個模板的好處還可以和普通的html一樣隨便設計版面例如<sform action=RegisterActiontheme=simple >

  PS要顯示action級別的錯誤提示需要在jsp頁面中的表單裡面加入<sactionerror/>


From:http://tw.wingwit.com/Article/program/Java/ky/201311/29109.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.