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>