struts 2(3)---struts 2のサービス側データ検証フレームワークvalidate


struts 2は、サービス側のデータ検証を容易に実現できる良いデータ検証フレームワークであるvalidateを提供しています.
 ActionSupport      validate()  ,         action        ,        。                         ,  execute                  ,    ,validate              :
->検証パス:executeの対応するアクションが実行されます.->検証に失敗しました:->失敗後のreturn結果を定義しました:errorなど、struts.xmlにerrorに対応するページが表示され、エラー情報が書かれた方法で表示されます.->return結果が定義されていません.デフォルトではINPUTが返されます.struts.xmlでinputに対応するページを定義する必要があります.そうしないと、エラーが発生します.
       ,validate             ,               ,        ,    validate+       (     ),  validateExecute      execute     ,validateLogin      login       。          validate  ,      validate+         。
フォーム内のフィールドが不正な場合は、addFieldError(「フィールドname」、「エラー情報」)メソッドを使用してクライアントに戻ることができます.->this.addFieldError(「name」、「ニックネームの長さは5以下でなければならない」).エラーメッセージは、nameに対応するテキストボックスの上に表示されます.エラーメッセージは表示されませんが、ページに追加するとラベルの位置に表示されます.編集者のテストでは、ラベルをフォームの内部に書くと、エラー情報がフォーム全体の上に表示されることがわかりました.
->複数の情報がある場合this.addFieldError(「name」のニックネームの長さは5より小さくしてはならない).this.addFieldError(「password」、「パスワードの長さは12より小さくない」).またはthis.addFieldError(「」、「ニックネームの長さは5以下でなければならない」).this.addFieldError("","パスワード長は12");全部表示されます
以下は一例です.
1.プロジェクトファイルは以下の通り:2.web.xml
<?xml version="1.0" encoding= "UTF-8"?>
<web-app version= "3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" >
  < display-name></display-name > 

  <!--        -->
  < filter>
        <filter-name >struts2 </filter-name >
       <!--  struts-2.1.3  ,org.apache.struts2.dispatcher.FileDispatcher       ,        -->
        <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class >
    </filter >
    <!--         struts2     web   -->
    <filter-mapping >
        <filter-name >struts2 </filter-name >
        <url-pattern >/* </url-pattern >
    </filter-mapping >

  < welcome-file-list>
    <welcome-file >index.jsp </welcome-file >
  </ welcome-file-list>
</web-app>

3.struts.xml
<?xml version="1.0" encoding= "UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <!-- struts       -->
    <!-- package-name:       package;      、      ;    package   ; package- namespace:        ( struts1  );   action          ; package-extends:      package            ; -->
    <package name ="struts" namespace="" extends= "struts-default">
     <!-- action-name:     package      action;      、      ;   action          ; action-class:action     (  +  ); action-method:action       ;     execute,  execute     -->
          <action name ="login" class="action.LoginAction" method= "execute">
              <result name ="success">/welcome.jsp</ result>
              <result name ="index">/login.jsp</ result>
              <result name ="input">/login.jsp</ result>
          </action >
          <action name ="index" class="action.LoginAction" method= "index">
              <result name ="index">/login.jsp</ result>
          </action >
    </package >

</struts>
4.UserBean.java
package bean;

public class UserBean {
     //     ,        ,     
     private String name;
     private String password;
     //      ,         ,  info               
     private String info;

     public String getName() {
            return name;
     }
     public void setName(String name) {
            this. name = name;
     }
     public String getPassword() {
            return password;
     }
     public void setPassword(String password) {
            this. password = password;
     }
     public String getInfo() {
            return info;
     }
     public void setInfo(String info) {
            this. info = info;
     }

}
5.LoginAction.java
package action;

import bean.UserBean;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/** * Action         ,       ,           Action ,         bean。 * *    action    bean,    ModelDriver(    ),  ModelDriver   ModelDriven 。 * * */
public class LoginAction extends ActionSupport implements ModelDriven<UserBean>{

     private UserBean model;

     @Override
     public UserBean getModel() {
          if(model == null){
               model = new UserBean();
          }              
          return model;
     }

     public String index(){
          return "index";
     }

     public String execute(){
          //            
          if("sa".equals(this.getModel().getName().trim())&&"aaaaaa".equals(this.getModel().getPassword().trim())){
            this.getModel().setInfo("    ");
               return SUCCESS;              
          }else{
               this.getModel().setInfo("    ");
               return "index";

          }
     }

     /** *       ,        ,    validate+   (     ) *    validate          */
     public void validateExecute(){
          if(this.getModel().getPassword().trim().length() == 0){
               //      
               //*   :            return     ,      INPUT

               //              ,  model.password            
               //                 <s:fielderror />     
                 this.addFieldError("", "      ");
                 this.addFieldError("", "      ");
          }
     }


}
6.login.jsp
<%@ page language ="java" import="java.util.*" pageEncoding= "UTF-8"%>
<%@ taglib prefix ="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
  < head>
    <title >   </title >
  </ head>

  < body>

   <!--    struts2           ,    struts2   -->
     <s:form action ="login">
     <s:textfield label ="   " name= "model.name"></s:textfield >
     <s:textfield label ="  " name= "model.password"></s:textfield >
     <s:submit value ="  "></ s:submit>
     </s:form >
     <!--        addFieldError            -->
     <s:fielderror />
  </ body>
</html>
7.welcome.jsp
<%@ page language ="java" import="java.util.*" pageEncoding= "utf-8"%>
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://" +request.getServerName()+":" +request.getServerPort()+path+"/"; %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  < head>
    <base href ="<%=basePath%> ">

    <title >info </title >

  </ head>

  < body>
     <!--      request  -->
     ${request.model.name}<br />
     ${request.model.info}<br />
     <!--         (       ) -->
     ${model.name}<br />
     ${model.info}<br />
     <!--    -->
     ${name}<br />
     ${info}<br />
  </ body>
</html>