Xdoclet?を使うときには、struts-plugins.xml に plug-inの設定を行い、Xdoclet?によってstruts-config.xml にマージする。
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml" />
</plug-in>
/*
* Copyright(c)2004-2005 **********. All Rights Reserved.
*/
package ****.****.****;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
/**
* AllForm.
* @struts.form
* name="AllForm"
* @author
* @version $Id$
*/
public class AllForm extends ValidatorForm {
private Byte byteForm;
private Date dateForm;
private Double doubleForm;
private Float floatForm;
private Integer integerForm;
private Long longForm;
private Short shortForm;
private String alnumForm;
private String creditcardForm;
private String emailForm;
private String stringForm;
/**
* <pre>
* Validatorの設定は、setterメソッドに定義します。
*
* ◎struts.validatorで
* -必須チェック=required
* -正規表現チェック=maks
* を行います。
*
* -必須チェックのエラーメッセージは、application.propertiesの
* errors.required です。
* -正規表現チェックのエラーメッセージは、application.propertiesの
* errors.invalid です。
* -application.propertiesとapplication_ja.propertiesを用意することにより
* クライアント側の言語設定によりメッセージをかえることができます。
*
* application.properties
* errors.required={0} is required.
* errors.invalid={0} is invalid.Please input {1} form.
* AllForm.alNum=Alphabet or Numeric Form
*
* application_ja.properties
* errors.required={0}は、必須入力項目です
* errors.invalid={0}は、不正な入力形式です。{1}の形で入力してください。
* AllForm.alNum=英数入力項目
*
* ◎struts.validator-varで
* チェック項目のパラメータを設定します
*
* ◎struts.validator-argsで
* チェックエラーメッセージのプレイスホルダに埋め込む文字列の設定をします。
* 複数のエラーメッセージがあっても同じ順番で埋め込まれます。
* -arg*resourceを使うと、application.properties から文字列を引いてきます
* -arg*valueを使うと、即値を設定できます。
* --即値には、${var:****}の形式で、struts.validator-varの値を参照させる
* ことができます
* </pre>
* @struts.validator
* type="required"
* @struts.validator
* type="mask"
* @struts.validator-var
* name="mask"
* value="[0-9a-zA-Z]*"
* @struts.validator-args
* arg0resource="AllForm.alNum"
* arg1value="${var:mask}"
* @param alnumForm alnumForm を設定。
*/
public void setAlnumForm(String alnumForm) {
this.alnumForm = alnumForm;
}
/**
* @return alnumForm を戻します。
*/
public String getAlnumForm() {
return alnumForm;
}
/**
* @struts.validator
* type="byte"
* @struts.validator-args
* arg0resource="AllForm.byte"
* @param byteForm byteForm を設定。
*/
public void setByteForm(Byte byteForm) {
this.byteForm = byteForm;
}
/**
* @return byteForm を戻します。
*/
public Byte getByteForm() {
return byteForm;
}
(中略)
/**
* reset.
* resetメソッドでJSPのFormに初期値を定義することができます。
* @param map ACTION MAPPING
* @param req HTTP REQUEST
*/
public void reset(ActionMapping map,HttpServletRequest req){
setAlNumForm( "1234567890abcdef" );
setByteForm( new Byte(0) );
...
}
}
| @struts.validator | @struts.validator-var | 対応するapplication.properties(struts-blank.war添付) | |
| .type | .name | .value | |
| mask | mask | 正規表現 | errors.invalid={0} is invalid.Please input {1} form. |
| maxlength | maxlength | 最大桁数 | errors.maxlength={0} can not be greater than {1} characters. |
| minlength | minlength | 最小桁数 | errors.minlength={0} can not be less than {1} characters. |
| range | max | 最大値 | errors.range={0} is not in the range {1} through {2}. |
| min | 最小値 | ||
| required | errors.required={0} is required. | ||
| byte | errors.byte={0} must be an byte. | ||
| date | errors.date={0} is not a date. | ||
| double | errors.double={0} must be an double. | ||
| float | errors.float={0} must be an float. | ||
| integer | errors.integer={0} must be an integer. | ||
| long | errors.long={0} must be an long. | ||
| short | errors.short={0} must be an short. | ||
| creditcard | rrors.creditcard={0} is not a valid credit card number. | ||
| errors.email={0} is an invalid e-mail address. | |||
尚 JSPで <html:errors />タグ を使ってエラーの一覧を表示するときには、 application.properties に定義した以下の項目によって整形される。
# -- standard errors -- errors.header=<UL> errors.prefix=<LI> errors.suffix=</LI> errors.footer=</UL>
<%@ page contentType="text/html;charset=Shift_JIS %>
<%@ taglib uri=/tags/struts-html" prefix="html" %>
<html:html>
<head>
<title>...</title>
<html:javascript formName="${FORM_NAME}"/>
</head>
<body>
<html:form action="Action名" onsubmit="return validate${FORM_NAME}(this)">
...
</html:form>
</body>
</html:html>
JSP ---> LDAction --(注文)-----> Action
@struts-action @struts-action
path="/orderSheet" path="/order"
validate="false" validate="true"
--(商品詳細)-> Action
@struts-action
path="/merchandiseDetail"
validate="false"<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation// DTD Commons Validator Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
<form-validation>
<formset>
<form name="OrderForm">
<field property="orderNo" depends="required"/>
<arg0 key="label.orderNo"/>
</field>
<field property="amount" depends="required"/>
<arg0 key="label.amount"/>
</field>
</form>
</formset>
(Actionによる検証項目の振り分け)
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation// DTD Commons Validator Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
<form-validation>
<formset>
<form name="/order">
<field property="orderNo" depends="required"/>
<arg0 key="label.orderNo"/>
</field>
<field property="amount" depends="required"/>
<arg0 key="label.amount"/>
</field>
</form>
</formset>
<formset>
<form name="/merchandiseDetail">
<field property="orderNo" depends="required"/>
<arg0 key="label.orderNo"/>
</field>
</form>
</formset>