Struts validation.xmlメモ

後で使えるかもしれないので、メモしておく。

mask

<constant>
	<!-- アスキー文字のみ -->
	<constant-name>MASK_ASCII_CHAR</constant-name>
	<constant-value>^[\x20-\x7E]*$</constant-value>
</constant>
<constant>
	<!-- 英数字のみ -->
	<constant-name>MASK_ALPHABET_AND_NUMBER</constant-name>
	<constant-value>^[0-9A-Za-z]*$</constant-value>
</constant>
<constant>
	<!-- 数字のみ -->
	<constant-name>MASK_NUMBER</constant-name>
	<constant-value>^\d+$</constant-value>
</constant>
<constant>
	<!-- 全角のみ -->
	<constant-name>MASK_ZENKAKU</constant-name>
	<constant-value>^[^\x20-\x7E]*$</constant-value>
</constant>
<constant>
	<!-- 全角カタカナのみ -->
	<constant-name>MASK_ZEN_KATAKANA</constant-name>
	<constant-value>^[ァ-ヶ・ーヽヾ]*$</constant-value>
</constant>
<constant>
	<!-- 郵便番号 -->
	<constant-name>MASK_ZIP_CODE</constant-name>
	<constant-value>^\d{3}-\d{4}$</constant-value>
</constant>
<constant>
	<!-- 電話番号 -->
	<constant-name>MASK_PHONE_NUMBER</constant-name>
	<constant-value>^\d{2,4}-\d{2,4}-\d{4}$</constant-value>
</constant>

validwhen 条件付きの入力必須項目

ある項目が入力されたら、入力必須とする。requiredifの代わり。

errors.requiredWith={0}を指定する場合は、{1}を入力してください。
errors.requiredWithTwo={0}を指定する場合は、{1}と{2}を入力してください。
parts.field1=フィールド1の項目名
parts.field2=フィールド2の項目名
parts.field3=フィールド3の項目名
<field property="field1" depends="validwhen">
	<msg name="validwhen" key="errors.requiredWith" />
	<arg position="0" key="parts.field1" />
	<arg position="1" name="validwhen" key="parts.field2" />
	<var>
		<var-name>test</var-name>
		<var-value>((*this* == null) or (field2 != null))</var-value>
	</var>
</field>
<field property="field1" depends="validwhen">
	<msg name="validwhen" key="errors.requiredWithTwo" />
	<arg position="0" key="parts.field1" />
	<arg position="1" name="validwhen" key="parts.field2" />
	<arg position="2" name="validwhen" key="parts.field3" />
	<var>
		<var-name>test</var-name>
		<var-value>((*this* == null) or ((field2 != null) and (field3 != null)))</var-value>
	</var>
</field>

validwhen 以前の値を変更してもらう場合

それまでの値と同じだったらエラーにする。

errors.noChange={0}が以前の値から変更されていません。
parts.newInput=新しい入力値の項目名
<field property="newInput" depends="validwhen">
	<msg name="validwhen" key="errors.noChange" />
	<arg position="0" key="parts.newInput" />
	<var>
		<var-name>test</var-name>
		<var-value>((*this* == null) or (oldValue != *this*))</var-value>
	</var>
</field>

validwhen パスワード変更画面

  • 現在のパスワード
  • 新しいパスワード
  • 新しいパスワード(再入力)

という3つの入力項目がある画面

errors.newPasswordNoChange=新しいパスワードが現在のパスワードから変更されていません。
errors.wrongRetype=新しいパスワード(再入力)に誤りがあります。
parts.password=現在のパスワード
parts.newPassword=新しいパスワード
parts.newPasswordRetype=新しいパスワード(再入力)
<constant>
	<constant-name>MAX_LEN_PASSWORD</constant-name>
	<constant-value>適当に入れる</constant-value>
</constant>
<constant>
	<constant-name>MASK_PASSWORD</constant-name>
	<constant-value>適当に入れる</constant-value>
</constant>
<form name="PasswordModifyForm">
	<field property="password" depends="maxlength,mask">
		<arg position="0" key="parts.password" />
		<var>
		    <var-name>maxlength</var-name>
		    <var-value>${MAX_LEN_PASSWORD}</var-value>
		</var>
		<var>
		    <var-name>mask</var-name>
		    <var-value>${MASK_PASSWORD}</var-value>
		</var>
	</field>
	<field property="newPassword" depends="required,maxlength,mask,validwhen">
		<msg name="validwhen" key="errors.newPasswordNoChange" />
		<arg position="0" key="parts.newPassword" />
		<var>
		    <var-name>maxlength</var-name>
		    <var-value>${MAX_LEN_PASSWORD}</var-value>
		</var>
		<var>
		    <var-name>mask</var-name>
		    <var-value>${MASK_PASSWORD}</var-value>
		</var>
		<var>
			<var-name>test</var-name>
			<var-value>((password == null) or (password != *this*))</var-value>
		</var>
	</field>
	<field property="newPasswordRetype" depends="required,maxlength,validwhen">
		<msg name="validwhen" key="errors.wrongRetype" />
		<arg position="0" key="parts.newPasswordRetype" />
		<var>
		    <var-name>maxlength</var-name>
		    <var-value>${MAX_LEN_PASSWORD}</var-value>
		</var>
		<var>
			<var-name>test</var-name>
			<var-value>((newPassword == null) or (newPassword == *this*))</var-value>
		</var>
	</field>
</form>