#contents
//-----------------------------------------------------------------------------
*Validator plugin [#kf81cfb3]
//-----------------------------------------------------------------------------
-Formからの入力チェックを行うことができる。
-必要なライブラリ&br;
Jakarta-Strutsの他に、Jakarta-Regexpが必要。&br;
http://jakarta.apache.org/regexp/ &br;
より最新版をダウンロードして展開し、ライブラリ(jakarta-regexp-1.3.jar)をアプリケーションの /WEB-INF/lib/ にコピーする。
//-----------------------------------------------------------------------------
*struts-plugins.xmlへの記述 [#l281626c]
//-----------------------------------------------------------------------------
[[Xdoclet>Xdoclet for Struts]]を使うときには、struts-plugins.xml に plug-inの設定を行い、[[Xdoclet>Xdoclet for Struts]]によって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>
//-----------------------------------------------------------------------------
*Form雛形 [#i1159406]
//-----------------------------------------------------------------------------
+Eclipseで、ValidatorFormを継承したFormを作成する
+private属性でフィールド(JSPのFORMに対応)を定義
+Eclipseで、getter/setterを生成する
+Javaソース上にstruts-config.xml/validation.xmlの内容を設定する
++Struts上でのFormの名前(struts-config.xml)は、クラスのdocletで定義する
++各項目のValidation(validation.xml)は、setterにdocletで定義する
+必要ならばreset()メソッドで初期値を設定する
#code(java){{
/*
* 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) );
...
}
}
}}
//-----------------------------------------------------------------------------
*標準で利用可能なValidatorとメッセージ [#s81fff80]
//-----------------------------------------------------------------------------
|@struts.validator|>|@struts.validator-var|対応するapplication.properties(struts-blank.war添付)|h
|.type |.name|.value |~|h
|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.|
|email | | |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>
//-----------------------------------------------------------------------------
*JSPへのValidation Javascriptの組込み [#x4a2f668]
//-----------------------------------------------------------------------------
-JSPに、JSPからServletにFormの内容を送信する前に、Validitionを行うJavascriptを生成することができる
--<html:javascritp>で、validate${FORM_NAME}() と言うJavascriptのメソッドが生成される
--${FORM_NAME}は、struts-config.xml 上の名前 (Java上のパッケージ名.クラス名ではない)
-Javascriptを生成してもサーバ側のチェックも行われる
#code(javascript){{
<%@ 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>
}}
//-----------------------------------------------------------------------------
*独自のValidator [#l20edfd7]
//-----------------------------------------------------------------------------
[[Struts 独自のValidator]]参照
//-----------------------------------------------------------------------------
*Validatorでは対処できない複雑な入力チェック [#oe470194]
//-----------------------------------------------------------------------------
+ボタンにより画面全てのValidateするしないを分ける
--Actionを呼び分けるだけのLookupDispatchActionを作り、そこからActionを呼ぶ
JSP ---> LDAction --(ボタンA)--> Action
JSP ---> LDAction --(注文)-----> Action
@struts-action @struts-action
path="/orderSheet" path="/order"
validate="false" validate="true"
--(ボタンB)--> Action
--(商品詳細)-> Action
@struts-action
path="/merchandiseDetail"
validate="false"
--こうすることによって、ボタンによって画面全ての検証をするか検証しないかを分けることが出来る
+ボタンにより画面の一部をValidateする
--Formは、ValidatorActionFormを継承する
--validate.xmlを編集&br;
validate.xml でForm名の代わりに、ActionのURLを使う&br;
(従来)
<?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>
--&color(red){この方法はXdocletからは使えない};
----
[[Java#Struts]]