FrontPage2008/01/20からのアクセス回数 17897

Spring-MVCプラグイン機能追加(Validation)

formのvalidation機能をSpring-MVCプラグイン1.1.1に追加しました。 あくまでも、ユーザがvalidation.xmlを編集するためのひな形を提供するという 考えです。

Spring-MVCプラグイン1.1.1のインストール

Spring-MVCプラグインの1.1.1のインストールには以下の4ファイルが必要です。

上記の添付ファイルをダウンロードしてください。近々公開用リポジトリを用意する予定です(それまでinstall-fileをご使用ください)。

  • 次に以下のコマンドを実行してください。
    mvn install:install-file \
     -Dfile=./spring-mvc-archetype-1.1.1.jar \
     -DgroupId=jp.co.pwv.spring-mvc-archetype \
     -DartifactId=spring-mvc-archetype \
     -Dversion=1.1.1 \
     -DpomFile=./spring-mvc-archetype-1.1.1.pom \
     -Dpackaging=jar
    
    mvn install:install-file \
     -Dfile=./maven-GenMVC-plugin-1.1.1.jar \
     -DgroupId=org.apache.maven.plugins \
     -DartifactId=maven-GenMVC-plugin \
     -Dversion=1.1.1 \
     -DpomFile=./maven-GenMVC-plugin-1.1.1.pom \
     -Dpackaging=jar
    
    

Validationで追加・変更されたファイル

Validation機能追加で追加・変更されたファイルは以下の通りです。

  • pom.xml(変更)
  • src/main/resources/form-message.properties(追加)
  • src/main/resources/message.properties(追加)
  • src/main/webapp/WEB-INF/servlet-def.xml(変更)
  • src/main/webapp/WEB-INF/servlet-stub.xml(変更)
  • src/main/webapp/WEB-INF/validation.xml(追加)
  • src/main/webapp/WEB-INF/validator-rules.xml(追加)

テスト用で追加・変更されたファイルは以下の通りです。

  • src/test/resources/form-message.properties(追加)
  • src/test/resources/message.properties(追加)
  • src/test/WEB-INF/servlet-def.xml(変更)
  • src/test/WEB-INF/servlet-stub.xml(変更)
  • src/test/WEB-INF/validation.xml(追加)
  • src/test/WEB-INF/validator-rules.xml(追加)

内容は、src/mainのものと同じものです。

pom.xml

validationには、org.springmodulesを使用します。

pom.xmlへの追加は、以下の通りです。

    <dependency>
      <groupId>org.springmodules</groupId>
      <artifactId>spring-modules-validation</artifactId>
      <version>0.8</version>
	  <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-validator</groupId>
      <artifactId>commons-validator</artifactId>
      <version>1.1.4</version>
	  <scope>compile</scope>
    </dependency>

servlet-stub.xml

各フォームコントローラでvalidationを有効にするために、validator属性を追加します。

    <bean id="memberController" class="example.test.web.EditMemberController"
          parent="baseMemberController">
....
        <property name="validator" ref="beanValidator"/>
....
    </bean>

validation.xml(自動生成される)

各フォームへのValidationは、validation.xmlに定義します。

		<form name="member">
			<field property="address" depends="required">
				<arg0 key="member.address" />
			</field>
			<field property="name" depends="required">
				<arg0 key="member.name" />
			</field>
		</form>

ここでは、フォームの各属性を必須(required)として定義しています。 これを適宜変更してください。

validator-rules.xml

validatorが使用する共通ルール、ここではstrutsのvalidation-rules.xmlをルールを使用しています。

servlet-def.xml

エラーメッセージ定義とValidation機能のために、servlet-def.xmlに messageSourceとbeanValidatorを定義します。

    <!-- Message sources -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basenames">
			<list>
				<value>messages</value>
				<value>form-messages</value>
			</list>
		</property>
	</bean>
	
	<!-- Validators -->
	<bean id="beanValidator" class= 
		"org.springmodules.validation.commons.DefaultBeanValidator"> 
	  <property name="validatorFactory" ref="validatorFactory" /> 
	</bean>
	<bean id="validatorFactory" class= 
		"org.springmodules.validation.commons.DefaultValidatorFactory"> 
	  <property name="validationConfigLocations"> 
		<list> 
		  <value>WEB-INF/validator-rules.xml</value> 
		  <value>WEB-INF/validation.xml</value> 
		</list> 
	  </property> 
	</bean>

message.properties

validator-rulesが使用するエラーメッセージを定義します。

# -- validator errors --
errors.header=
errors.footer=
errors.prefix=<div class="error"> 
errors.suffix=</div><br/>

errors.required={0} is required.
errors.minlength={0} can not be less than {1} characters.
errors.maxlength={0} can not be greater than {1} characters.
errors.invalid={0} is invalid.

errors.byte={0} must be a byte.
errors.short={0} must be a short.
errors.integer={0} must be an integer.
errors.long={0} must be a long.
errors.float={0} must be a float.
errors.double={0} must be a double.

errors.date={0} is not a date.
errors.range={0} is not in the range {1} through {2}.
errors.creditcard={0} is an invalid credit card number.
errors.email={0} is an invalid e-mail address.

form-message.properties(自動生成される)

各フォームの属性をエラーメッセージで表示するときの名称をform-message.propertiesで定義 します。

# -- form messages --
# -- Member
member.address=Member address
member.name=Member name

Validationの動作確認

実際にvalidationが正常の動作するかhttp://localhost:8080/test/でaddリンクをクリックして 一部の値をセットしないで、Save Changesボタンを押すと、以下のように属性の横にエラーメッセージを 出力して、入力画面に戻ってきます。

validation.jpg

validation.xmlで使用できるvalidationルール

今回は、apache common validatorの機能を使ってvalidationを実装しています。 validator-rulesに定義してあるvalidationルールを以下に示します。

ValidationルールValidation対象
byteフィールドがbyteとして代入できる値を含むか否か
creditCardLUHNチェックを行い、有効なカード番号文字列か否か
dateフィールドがDateフォーマットに適合する値か否か
doubleフィールドがdoubleとして代入できる値を含むか否か
emailフィールドがemailアドレスとしてふさわしい文字列か否か
floatフィールドがfloatとして代入できる値を含むか否か
floatRangeフィールドの値が指定されたfloat値の範囲に含まれるか否か
intRangeフィールドの値が指定されたint値の範囲に含まれるか否か
integerフィールドがintegerとして代入できる値を含むか否か
longフィールドがlongとして代入できる値を含むか否か
maskフィールドの文字列が指定されたmaskとマッチするか否か
maxlengthフィールドの文字列の数が指定された値を超えないか否か
minlengthフィールドの文字列の数が少なくとも指定された値を満たしているか否か
requiredフィールドが空か否か
requiredif指定した条件に合致した場合に、フィールドが空か否か
shortフィールドがshortとして代入できる値を含むか否か

各ルールの使い方は、http://www.techscore.com/tech/ApacheJakarta/Struts/13.html 詳しく説明されています。

型変換をチェックする

byte, date, double, float, integer, long, shortは、すべて型変換が可能かどうかをチェックするルールです。 使い方はすべて同じで、

			<field property="address" depends="required,byte">
				<arg0 key="member.address" />
			</field>

のようにdepends属性でrequired,byteの様にrequired,の後に型名称を指定します。requiredを付けるのは型変換時のエラーを防ぐためです。

文字列をチェックする

creditCard, email, mask, maxlength, minlengthは文字列をチェックするルールです。

  • creditCard, emailは引数が不要です。
  • maskはパターンを示すvarタグが必要です。 例
    			<field property="address" depends="required,mask">
    				<arg0 key="member.address" />
    				<var>
    					<var-name>mask</var-name>
    					<var-value>^[0-9A-Za-z]{2,6}$</var-value>
    				</var>
    			</field>
    
  • maxlength, minlenghtは、長さを指定するvarタグが必要です。 例
    			<field property="address" depends="maxlength">
    				<arg0 key="member.address" />
    				<var>
    					<var-name>maxlength</var-name>
    					<var-value>20</var-value>
    				</var>
    			</field>
    

数値の範囲をチェックする

intRange, floatRangeは数値の範囲をチェックするルールです。 例

			<field property="quantity" depends="required,intRange">
				<arg0 key="lineItem.quantity" />
				<var>
					<var-name>min</var-name>
					<var-value>1</var-value>
				</var>
				<var>
					<var-name>max</var-name>
					<var-value>10</var-value>
				</var>
			</field>

コメント

この記事は、

選択肢 投票
おもしろかった 10  
そうでもない 2  
わかりずらい 13  

皆様のご意見、ご希望をお待ちしております。


(Input image string)


添付ファイル: filespring-mvc-archetype-1.1.1.jar 1744件 [詳細] filemaven-GenMVC-plugin-1.1.1.jar 1555件 [詳細] filemaven-GenMVC-plugin-1.1.1.pom 1614件 [詳細] filevalidation.jpg 2068件 [詳細] filespring-mvc-archetype-1.1.1.pom 1656件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-11-15 (火) 09:32:24 (725d)
SmartDoc