struts 2データ検証のまとめ


struts 2のデータチェックは、struts 2のタイプ変換後に行われます.以下の例を示します.
 1、register 2.jspを作成して、顧客にデータを入力させます.コードは以下の通りです.
  
<body>
		<table align="center" width="30%">
			<tr>
				<td style="color:red">
					<s:fielderror></s:fielderror>
				</td>
			</tr>
		</table>

<form action="reg.action" method="post">
			<table align="center" border="1" width="30%">
				<tr>
		             <td>
						username
					</td>
					<td>
						<input type="text" name="username" />
					</td>
				</tr>
				<tr>
					<td>
						password
					</td>
					<td>
						<input type="password" name="password">
					</td>
				</tr>
				<tr>
					<td>
						re-password
					</td>
					<td>
						<input type="password" name="repassword">
					</td>
				</tr>
				<tr>
					<td>
						age
					</td>
					<td>
						<input type="text" name="age">
					</td>
				</tr>
				<tr>
					<td>
						birthday
					</td>
					<td>
						<input type="text" name="birthday">
					</td>
				</tr>
				<tr>
					<td>
						graduation
					</td>
					<td>
						<input type="text" name="graduation">
					</td>
				</tr>
                <tr>
					<td>
					    <input type="submit" value="submit">
					</td>
					<td>
						<input type="reset" value="reset">
					</td>
				</tr>
			</table>
           
            
		</form>
</body>
   次の規則に従ってデータチェックができます.
   (1)usernameは空の値ではなく、長さは6-10の間です.
   (2)passwordは空の値ではなく、長さは6-10の間です.
   (3)repasswordは空の値ではなく、長さは6-10の間です.
   (4)ageは1−150の間でなければならない.
   (5)bithdayは空の値ではいけません.
   (6)graduationは空の値ではありません.
   (7)bithdayの日付はgraduationの日付より早くしなければなりません.
2、検査ファイルを配置して、名前は:Register Aciton-validation.xmlです.下記のコードを追加します
   
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="username">
    <field-validator type="requiredstring">
    <param name="trim">true</param>
    <message>username is should not be null!</message>
   </field-validator>
   <field-validator type="stringlength">
   <param name="maxLength">10</param>
   <param name="minLength">6</param>
   <message>username length is incorrect and should be between ${minLength} and ${maxLength}</message>
   </field-validator>
</field>

<field name="password">
<field-validator type="requiredstring">
  <param name="trim">true</param>
  <message>password is should not be null</message>
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message>password length is incorrect and should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>

<field name="repassword">
<field-validator type="requiredstring">
  <param name="trim">true</param>
  <message>repassword is should not be null</message>
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message>repassword length is incorrect and should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>

<field name="age">
    <field-validator type="int">
    <param name="max">10</param>
    <param name="min">6</param>
    <message>age is incorrect and should be between ${min} and ${max}</message>
    </field-validator>
</field>
 
 <field name="birthday">
   <field-validator type="required">
    <message>birthday is incorrect</message>
   </field-validator>
 </field>

 <field name="graduation">
   <field-validator type="required">
    <message>graduation is incorrect</message>
   </field-validator>
   <field-validator type="date">
   <param name="max">2050-08-12</param>
   <param name="min">2010-09-23</param>
   <message>graduation should after the birthday</message>
   </field-validator>
 </field>
</validators>
 3、Register Aciton類を編纂する
   
package com.test.action;

import java.util.Calendar;
import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAciton extends ActionSupport{
private String username;
private String password;
private String repassword;
private int age;
private Date birthday;
private Date graduation;
public String getUsername() {
	return username;
}
public void setUsername(String username) {
	this.username = username;
}
public String getPassword() {
	return password;
}
public void setPassword(String password) {
	this.password = password;
}
public String getRepassword() {
	return repassword;
}
public void setRepassword(String repassword) {
	this.repassword = repassword;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public Date getBirthday() {
	return birthday;
}
public void setBirthday(Date birthday) {
	this.birthday = birthday;
}

@Override
public String execute() throws Exception {
	
  return SUCCESS;
}
@Override
public void validate() {
			
}
public Date getGraduation() {
	return graduation;
}
public void setGraduation(Date graduation) {
	this.graduation = graduation;
}
	
	
	
}
 
   4、struts.xmlファイルの配置
     
<action name="reg" class="com.test.action.RegisterAciton">
      <result name="success">/success.jsp</result>
      <result name="input">/register.jsp</result>
  </action>
 
5、success.jspファイルを作成する
<body>
    username <s:property value="username"/><br>
    password <s:property value="password"/><br>
    re-password <s:property value="repassword"/><br>
    age <s:property value="age"/><br>
    birthday <s:property value="birthday"/><br>
    graduation <s:property value="graduation"/>

</body>
 これまでのデータ検証の例の設定に成功しました.
6、まとめ
    (1)データチェック中のxmlファイルの名前は正確でなければなりません.「actionの類名-validation.properties」.
    (2)struts 2はデフォルトのチェックを提供してくれました.印刷された情報はとても友好的ではないので、私達はそれが提供した情報を修正することができます.次の2つの方法があります.
   第一の方法:
    struts.xmlに入れます.
         
<constant name="struts.custom.i18n.resources"value="message"></constant>
    そして、新しいmessage.propertiesというファイルを作成します.コードは以下の通りです.
    
xwork.default.invalid.fieldvalue={0} error
  第二の方法:
      定義ファイル名をクラス名として入力するコードは以下の通りです.
     
invalid.fieldvalue.age=\u5e74\u9f84\u8f93\u5165\u4e0d\u6b63\u786e
     invalid.fieldvialue.age=年齢情報の入力が正しくないという意味です.
  (3)全部で二つの検査方法があります.addAction Err方法とaddFieldErr方法は、jspファイルで以下のように設定して、表示する内容を指定します.
  
<table align="center" width="30%">
     <tr>
          <td style="color: red">
                   <s:fielderror cssStyle="color:red" />
         </td>
    </tr>
</table>
 (4)サーバ側のデータチェック以外に、クライアントのデータチェックを提供できます.クライアントセグメントのデータチェックは2つの方法があります.
     formのテーマは必ずシンプルに設定できません.formのvalidate属性はtrueに設定します.                        struts 2を使用しない方がいいです.クライアント検証方法を提供してくれます.
    第二の方法:jsコードを作成して実現する.
                        formのonsubmitの値を下記のコードに設定します.
                             
<s:form action="reg" theme="simple" onsubmit="return validate()">
      編纂js
       
 <script type="text/javascript">
       function validate()
       {
         var usernamevalue=document.getElementById("usernameId").value;
         var passwordvalue=document.getElementById("passwordId").value;
         var repasswordvalue=document.getElementById("repasswordId").value;
         if(usernamevalue.length==0)
         {
             alert("username should not be blank");
             return false;  
         }
         else if(usernamevalue.length>10||usernamevalue.length<6)
          {
             alert("length of username should be between 6 and 10");
             return false;    
          }       
        if(passwordvalue.length==0)
         {
             alert("password should not be blank");
             return false;  
         }
         else if(passwordvalue.length>10||passwordvalue.length<6)
          {
             alert("length of password should be between 6 and 10");
             return false;    
          }       
           if(repasswordvalue.length==0)
         {
             alert("repassword should not be blank");
             return false;  
         }
         else if(repasswordvalue.length>10||repasswordvalue.length<6)
          {
             alert("length of repassword should be between 6 and 10");
             return false;    
          }  
          
         if(repasswordvalue!=passwordvalue)     
         {
             alert("repasswordis not equals password!");
             return false;    
          }  
         return true;
       }
   
       </script>
 (5)xmlファイルを使ってデータをチェックする場合、actionクラスでvalidateメソッドを書き換えないでください.
(6)具体的なactionクラスのいずれかの業務ロジックのみをチェックします.名前は「aciton類の名前-メソッド名-validation.xml」です.「action類の名前-validation.xml」を定義したら、struts 2は先に前者を実行します.だから、後者を定義しない方がいいです.
(7)
   
class parentAction
{

   test()
}
  
class childAction extends parentAction
{

test()//  test
}
parentAction-validtion.xml
parentAction-test-validtion.xml
childAction-validtion.xml
childAction-test-validtion.xml
 以上のコードに対して、struts 2のすべてのxmlファイルに対するアクセス順は上から下までです.