<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      川哥哥

      導航

      struts2之數據校驗

      概述

        在提交表單數據時,如果數據需要保存到數據庫,空輸入等可能會引發一些異常,為了避免引起用戶的輸入引起底層異常,通常在進行業務邏輯操作之前,先執行基本的數據校驗。

        下面通過四種方式來闡述Struts 2的數據校驗功能。

      校驗前準備工作

      1.創建實體類

      public class UserInfo {
          private String uname;
          private String upwd;
          private String repwd;
      
          public String getUname() {
              return uname;
          }
      
          public void setUname(String uname) {
              this.uname = uname;
          }
      
          public String getUpwd() {
              return upwd;
          }
      
          public void setUpwd(String upwd) {
              this.upwd = upwd;
          }
      
          public String getRepwd() {
              return repwd;
          }
      
          public void setRepwd(String repwd) {
              this.repwd = repwd;
          }
      }

      2.創建Action

      public class LoginAction extends ActionSupport  {
          private UserInfo info;
         
          @Override
          public String execute() throws Exception {
              return SUCCESS;
          }
      
      
          public UserInfo getInfo() {
              return info;
          }
      
          public void setInfo(UserInfo info) {
              this.info = info;
          }
      }

      3.jsp頁面

      <h1>用戶注冊</h1>
      <s:fielderror></s:fielderror>
      <s:form action="aaaaa" method="POST">
          <s:textarea label="用戶名" name="info.uname"/><br>
          <s:password label="密碼" name="info.upwd"/><br>
          <s:password label="確認密碼" name="info.repwd"/><br>
          <s:submit value="注冊"/>

       

      一 用execute()實現校驗

       

      @Override
          public String execute() throws Exception {
              if (info.getUname().length()==0){
                  addFieldError("uname","用戶名不能為空");
              }
              if (info.getUpwd().length()==0){
                  addFieldError("upwd","密碼不能為空");
              }
              if(!info.getRepwd().equals(info.getUpwd())){
                  addFieldError("repwd","兩次輸入密碼不一致");
              }
              if(this.hasFieldErrors()){
                  return  INPUT;
              }
              return SUCCESS;
          }

       

      struts.xml配置

      <!--使用execute()方法實現數據校驗-->
        <action name="loginAction"    class="cn.happy.action.LoginAction">
                      <result name="input">login.jsp</result>
                      <result name="success">sucess.jsp</result>
         </action>  

      二.使用validate()實現數據校驗

       

      @Override
          public void validate() {
              if (info.getUname().length()==0){
                  addFieldError("uname","用戶名不能為空");
              }
              if (info.getUpwd().length()==0){
                  addFieldError("upwd","密碼不能為空");
              }
              if(!info.getRepwd().equals(info.getUpwd())){
                  addFieldError("repwd","兩次輸入密碼不一致");
              }
          }

       

      struts.xml配置

       <!--使用validate()實現數據校驗-->
              <action name="loginAction" class="cn.happy.action.LoginAction">
                  <result name="input">login.jsp</result>
                  <result name="success">sucess.jsp</result>
              </action>

      三.使用validateXxx()方法實現數據校驗

       

      public void validateRegist(){
              if(info.getUname().length()<6||info.getUname().length()>15){
                  addFieldError("uname","用戶名長度在6-15位");
              }
              if(info.getUpwd().length()<6){
                  addFieldError("upwd","密碼要大于6位");
              }
          }
          public String Regist(){
              return SUCCESS;
          }
          public void validate() {
              if (info.getUname().length()==0){
                  addFieldError("uname","用戶名不能為空");
              }
              if (info.getUpwd().length()==0){
                  addFieldError("upwd","密碼不能為空");
              }
              if(!info.getRepwd().equals(info.getUpwd())){
                  addFieldError("repwd","兩次輸入密碼不一致");
              }
          }

       

      struts.xml配置

        配置action元素,指定Action由Regist()方法來進行請求的處理

       <!--使用validateXxx()方法實現數據校驗-->
             <action name="loginAction" class="cn.happy.action.LoginAction" method="Regist">
                  <result name="input">login.jsp</result>
                  <result name="success">sucess.jsp</result>
              </action>

      四.使用框架驗證

       

      已有的校驗器

       

      Struts 2.0已經為您實現很多常用的校驗了,以下在jar的default.xml中的注冊的校驗器。

      < validators > 
          < validator name ="required" class ="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" /> 
          < validator name ="requiredstring" class ="com.opensymphony.xwork2.validator.validators.RequiredStringValidator" /> 
          < validator name ="int" class ="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" /> 
          < validator name ="double" class ="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" /> 
          < validator name ="date" class ="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" /> 
          < validator name ="expression" class ="com.opensymphony.xwork2.validator.validators.ExpressionValidator" /> 
          < validator name ="fieldexpression" class ="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" /> 
          < validator name ="email" class ="com.opensymphony.xwork2.validator.validators.EmailValidator" /> 
          < validator name ="url" class ="com.opensymphony.xwork2.validator.validators.URLValidator" /> 
          < validator name ="visitor" class ="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" /> 
          < validator name ="conversion" class ="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" /> 
          < validator name ="stringlength" class ="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" /> 
          < validator name ="regex" class ="com.opensymphony.xwork2.validator.validators.RegexFieldValidator" /> 
      </ validators > 

      使用校驗框架既可以方便地實現表單數據校驗,又能夠將校驗與Action分離,故我們應該盡可能使用校驗框架。

       

      1編寫驗證文件,驗證文件要和驗證的Action放在同一個包下,并且采用ClassName-validation.xml方式命名,其中ClassName表示Action的類名

      LoginAction-validation.xml編寫

       

      <!DOCTYPE
              validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
              "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
      
      <validators>
          <!--用戶名不能為空,長度在6-15位-->
          <field name="info.uname">
              <field-validator type="requiredstring">
                  <param name="trim">true</param>
                  <message>用戶名不能為空</message>
              </field-validator>
              <field-validator type="stringlength">
                  <param name="maxLength">15</param>
                  <param name="minLength">6</param>
                  <message>用戶名長度必須在${minLength}和${maxLength}之間</message>
              </field-validator>
          </field>
      
          <!--驗證密碼不為空,長度不小于6-->
          <field name="info.upwd">
              <field-validator type="requiredstring">
                  <param name="trim">true</param>
                  <message>密碼不能為空</message>
              </field-validator>
              <field-validator type="stringlength">
                  <param name="minLength">6</param>
                  <message>密碼長度應大于等于${minLength}</message>
              </field-validator>
          </field>
      
          <!--驗證確認密碼-->
          <field name="info.repwd">
              <field-validator type="fieldexpression">
                  <param name="expression">info.upwd==info.repwd</param>
                  <message>兩次輸入密碼要相同</message>
              </field-validator>
          </field>
      </validators>

      struts.xml配置

       <!--使用框架驗證-->
              <action name="aaaaa" class="cn.happy.action.LoginAction" >
                  <result name="input">login.jsp</result>
                  <result name="success">sucess.jsp</result>
              </action>

       

      上述的輸出說明了Struts 2.0的數據校驗工作方式,它需要經過下面幾個步驟:

      1. 通過轉換器將請求參數轉換成相應的Bean屬性;
      2. 判斷轉換過程是否出現異常。如果有,則將其保存到ActionContext中,conversionError攔截器再封裝為fieldError;如果沒有,進行下一步;
      3. 通過反射(Reflection)來調用validateXxx()方法(其中,Xxx表示Action的方法名);
      4. 調用validate()方法;
      5. 如果經過上述步驟沒有出現fieldError,則調用Action方法;如果有,則會跳過Action方法,通過國際化將fieldError輸出到頁面。

      不喜歡看文字的朋友,可以參考下面的圖1。

       

      看到這里可能大家會疑問:“這么多地方可以校驗表單數據,到底我應該在那里做呢?”有選擇是好事,但抉擇的過程往往是痛苦的,往往讓人不知所措。如果大家參照以下幾點建議,相信會比較容易地做出正確的抉擇。

        1. 如果需要轉換的數據,通常做法在轉換的時候做格式的校驗,在Action中的校驗方法中校驗取值。假如用戶填錯了格式,我們可以通過在資源文件配置invalid.fieldvalue.xxx(xxx為屬性名)來提示用戶正確的格式,不同的階段出錯顯示不同的信息。具體做法請參考上面的例子;
        2. 至于用validate()還是validateXxx(),我推薦使用validate()。原因是validateXxx()使用了反射,相對來說性能稍差,而validate()則是通過接口com.opensymphony.xwork2.Validateable調用。當然如果你的表單數據取值是取決于特定Action方法,則應該使用validateXxx()。  

      posted on 2017-03-13 16:01  川哥哥  閱讀(305)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 自拍偷自拍亚洲精品播放| 国产无遮挡猛进猛出免费软件| 欧美日韩精品一区二区视频| 蜜臀91精品国产高清在线| 高清破外女出血AV毛片| 国产一区二区三区小说| 性欧美欧美巨大69| 在线高清免费不卡全码| 国产真实露脸乱子伦原著| 天堂а√在线地址中文在线| 久久人与动人物a级毛片| 无码帝国www无码专区色综合| 999国产精品999久久久久久| 一区二区三区国产综合在线| 毛片免费观看视频| 免费AV片在线观看网址| 国产精品老熟女免费视频| 欧美日韩高清在线观看| 人妻无码中文字幕| 国产激情第一区二区三区| 少妇人妻偷人精品免费视频| 亚洲欧洲av一区二区| 国产一区在线播放av| 久久久av波多野一区二区| 狠狠色噜噜狠狠狠888米奇视频| 国产成人综合色就色综合| 欧洲熟妇色xxxx欧美老妇多毛网站| 人人妻人人爽人人添夜夜欢视频| 欧美综合婷婷欧美综合五月| 国偷自产一区二区三区在线视频| 90后极品粉嫩小泬20p| 亚洲日韩欧美丝袜另类自拍 | 国产精品福利自产拍久久| 尚义县| 一区二区三区四区亚洲自拍| 久热综合在线亚洲精品| 红安县| 国产成年码av片在线观看| 中文字幕无码中文字幕有码a| 漂亮人妻中文字幕丝袜| 久热久热久热久热久热久热|