便利なコードパーツ集!

やまろうのプログラミングTips

Java

Strutsで掲示板! Validatorで入力チェック

投稿日:2016年12月6日 更新日:

スポンサーリンク



2003年

Validatorはユーザがフォームで入力した値を検証する機能を
提供します。

どのような仕組みかというと、入力チェックする"フォーム名"、
"プロパティ名"、"行うチェック"をvalidation.xmlに書きます。

"行うチェック"の具体的な方法(チェックを行うクラス名や、JavaScriptコード等)
を、validator-rules.xmlに書きます。デフォルトのvalidator-rules.xmlには、
チェックを行うクラス名や、JavaScriptコード等が書かれているので、
新たに独自のチェックを加えない場合はそのまま使用できます。逆に言えば、
用意されているチェック以外に自分でチェックを加えることが出来るのです。

それでは、Validator仕様のステップに入ります。
1.struts-config.xmlのplug-inにValidatorPlugInを加える。
[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"/>

2.struts-config.xmlにform-beanの定義を加える。
[struts-config.xml]に以下を追加

<form-beans>
<form-bean name="forumForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="name" type="java.lang.String" />
<form-property name="message" type="java.lang.String" />
</form-bean>
</form-beans>

[意味]
・forumFormっていう名前のフォームがsubmitされてきたら、
org.apache.struts.validator.DynaValidatorFormクラスのインスタンスに
"name"と"message"っていうリクエストパラメータの値を設定してください。

3.validation.xmlを作成、WEB-INF直下に配置
[validation.xml]

<?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>
<global>
</global>
<formset>
<form name="forumForm">
<field property="name" depends="required">
<arg0 key="名前" resource="false"/>
</field>
<field property="message" depends="required">
<arg0 key="メッセージ" resource="false"/>
</field>
</form>
</formset>
</form-validation>

[意味]
・forumFormというフォームのnameというプロパティはrequired(入力必須)の
チェックをしてね。
エラーメッセージの引数1には"名前"って文字を使ってね。
・forumFormというフォームのmessageというプロパティはrequired(入力必須)の
チェックをしてね。
エラーメッセージの引数1には"メッセージ"って文字を使ってね。

4.validator-rules.xmlを作成、WEB-INF直下に配置
[validator-rules.xmlの一部抜粋]

<form-validation><global>

<validator name="required"
classname="org.apache.struts.validator.FieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="errors.required">

<javascript><![CDATA[
function validateRequired(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oRequired = new required();
for (x in oRequired) {
var field = form[oRequired[x][0]];

if (field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'file' ||
field.type == 'select-one' ||
field.type == 'radio' ||
field.type == 'password') {

var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
}
} else {
value = field.value;
}

if (value == '') {

if (i == 0) {
focusField = field;
}
fields[i++] = oRequired[x][1];
bValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}]]>
</javascript>

</validator>

[意味]
validation.xmlでrequiredって指定してきたら
・サーバサイドチェックでは org.apache.struts.validator.FieldChecksって
いうクラスのvalidateRequiredってメソッドを呼び出してね。
・クライアントチェックでは<javascript>タグの中で定義してる
関数を呼び出してね。

5.JSPにValidatorを起動するコードを記述する。
[message.jsp]

<html:errors/>
<html:javascript formName="forumForm"/>
<html:form action="/sendMessage" onsubmit="return validateForumForm(this);">

[意味]
・javascriptでチェックをするフォーム名は"forumForm"です。
・sendMessage.doっていうURLに向かってsubmit(送信)します。submitする時に
"return validateForumForm(this);"を実行してね。

または、

<html:errors/>
<html:form action="/sendMessage">

と記述するとjavascriptでチェックは行われません。サーバーサイドでのみ
チェックされます。

6.エラーメッセージをApplicationResources.propertiesに記述する。
errors.required={0} を入力してください。
errors.header=<b>
errors.footer=</b>

[意味]
・requiredでエラーになったら[validation.xmlで指定した引数1]を
入力して下さい。3番で出てきた「エラーメッセージの引数1には」っていうのは
{0}のことだったわけです。
・サーバサイドでチェックエラーになった場合に<html:errors/>に
エラーメッセージを表示するけど、そのメッセージを<b>と</b>で
挿みます。だから、errors.header、errors.footerなわけです。

いかがだったでしょうか?外部ファイルにチェック内容書くだけで、とても
簡単で便利だなぁと感じました。皆さんも使ってみたいと思いましたか?
そのリクエストにお答えして、この「Strutsで掲示板」アプリケーションを
ホームページからダウンロード出来るようにしました。アドレスは

http://yamarou.at.infoseek.co.jp/forum.html

です。ダウンロードしたファイルの拡張子を.warにしてtomcatを使う場合は
TOMCAT_HOME/webappsに置いてtomcatを起動し、

http://localhost:8080/forum/loadMessage.do

にアクセスすると動かすことが出来ます。ぜひ実際に動かしてみてください。
次回は例外ハンドラをフィーチャーしたいと思います。例外ハンドラは
Actionクラスから投げられた例外を処理するクラスです。例外の種類によって
動作する例外ハンドラを切り替えることが出来ます。

お楽しみに!
やまろう

スポンサーリンク

-Java

Copyright© やまろうのプログラミングTips , 2020 AllRights Reserved Powered by AFFINGER4.