asamiのメモ帳

Struts/入力値チェックの編集履歴ソース

「Struts/入力値チェック」の編集履歴(バックアップ)一覧に戻る

Struts/入力値チェック - (2008/07/10 (木) 13:33:16) のソース

**入力値チェックがしたい

【やりたいこと】
名前と年齢を必須入力にする。
年齢に数値が入力されているかをチェックする。
チェックにひっかかったら、output.jspにはとばずに、
input.jspにとどまって、エラーメッセージを表示する。

【input.jspの編集】
input.jspにエラーメッセージを表示させるために、
表示させたい場所に<html:errors/>と追記する。
input.jsp(赤文字は追加部分)
#divstyle(background-color:#FFFFCC;width:400px;height:200px;overflow:auto;){{
<%@ page contentType="text/html; charset=Shift-JIS"%>
<%@ taglib uri="/struts-html.tld" prefix="html" %>

<html>
<head><title>入力画面</title></head>
<body>

名前・年齢をを入力し、血液型を選択してください。
<br>
&color(red){<html:errors/>}

<html:form action="/sendData" focus="name">
&space(2)名前:
&space(2)<html:text property="name" size="16"/>
&space(2)<br>
&space(2)年齢:
&space(2)<html:text property="age" size="8" />
&space(2)<br>
&space(2)血液型:
&space(2)<html:select property="bloodtype">
&space(4)<html:option value="A">A</html:option>
&space(4)<html:option value="B">B</html:option>
&space(4)<html:option value="O">O</html:option>
&space(4)<html:option value="AB">AB</html:option>
&space(2)</html:select>
&space(2)<br><br>
&space(2)<html:submit property="submit" value="送信"/>
&space(2)<br><br>
</html:form>

</body>
</html>
}}

【TestActionForm.javaの編集】
継承をActionFormからValidatorFormにすることで、
入力チェックを有効にします。
TestActionForm.java(青文字は変更部分)
#divstyle(background-color:#FFFFCC;width:400px;height:200px;overflow:auto;){{
import org.apache.struts.&color(blue){validator.ValidatorForm};

public class TestActionForm extends &color(blue){ValidatorForm} {
&space(2)
&space(2)private String name;
&space(2)private String age;
&space(2)private String bloodtype;
&space(2)
&space(2)public String getAge() {
&space(4)return age;
&space(2)}
&space(2)public void setAge(String age) {
&space(4)this.age = age;
&space(2)}
&space(2)public String getBloodtype() {
&space(4)return bloodtype;
&space(2)}
&space(2)public void setBloodtype(String bloodtype) {
&space(4)this.bloodtype = bloodtype;
&space(2)}
&space(2)public String getName() {
&space(4)return name;
&space(2)}
&space(2)public void setName(String name) {
&space(4)this.name = name;
&space(2)}

}
}}

【struts-config.xmlの編集】
入力値チェックができるように、追記。
actionタグの「validate」は入力値チェックを行うかどうか、「input」はチェックに引っかかった場合にどのページに遷移するか。
plug-inタグはチェックをするために必要なプラグイン、設定ファイルについて記述。
struts-config.xml(赤文字は追記部分)
#divstyle(background-color:#FFFFCC;width:400px;height:200px;overflow:auto;){{
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
&space(2)"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
&space(2)"&html(http://struts.apache.org/dtds/struts-config_1_1.dtd)">

<struts-config>
&space(2)<form-beans>
&space(4)<form-bean name="form" type="TestActionForm" />
&space(2)</form-beans>
&space(2)<action-mappings>
&space(4)<action path="/sendData" type="TestAction" name="form" &color(blue){validate="true" input="/jsp/input.jsp"}>
&space(4)&space(2)<forward name="success" path="/jsp/output.jsp" />
&space(4)</action>
&space(2)</action-mappings>
&space(2)
&space(2)<message-resources parameter="ApplicationResources"/>
&space(2)
&space(2)&color(blue){<plug-in className="org.apache.struts.validator.ValidatorPlugIn">}
&space(4)&color(blue){<set-property value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" property="pathnames" />}
&space(2)&color(blue){</plug-in>}

</struts-config> 
}}

【validation.xmlの作成】
どんなチェックをするかをここに記述。
WEB-INFの下に作ってください。
同時に、WEB-INF/validator-rules.xmlが存在するか確認してください。

年齢のチェックでは、
・年齢が入力されているか、数値かどうかをチェックします(fieldタグ)
・入力されていないときは、(ApplicationResources.propertiesであとで記述する)errors.requiredを表示します。(msgタグ1)
・数値出ないときは~.propertiesで記述したerrors.integerを表示します。(msgタグ2)
・そのときに引数で~.propertiesで記述したageを渡します。(arg0タグ)
validation.xml
#divstyle(background-color:#FFFFCC;width:400px;height:200px;overflow:auto;){{
<?xml version="1.0" encoding="Shift_JIS" ?>

<!DOCTYPE form-validation PUBLIC
&space(2)"-//Apache Software Foundation// DTD Commons Validator Rules Configuration 1.1.3//EN"
&space(2)"&html(http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd)">

<form-validation>
&space(2)<formset>
&space(4)<form name="form">
&space(6)<field property="name" depends="required">
&space(10)<msg name="required" key="errors.required" />
&space(10)<arg0 key="name"/>
&space(6)</field>
&space(6)
&space(6)<field
&space(8)property="age" depends="required,integer">
&space(10)<msg name="required" key="errors.required" />
&space(10)<msg name="integer" key="errors.integer" />
&space(10)<arg0 key="age"/>
&space(6)</field>
&space(6)
&space(4)</form>
&space(2)</formset>&space(2)
</form-validation>
}}

【ApplicationResources.propertiesの編集】
ここには表示するメッセージなどを記述します。

errors.*と記述されているものは、
input.jspで<html:errors/>と記述したところに表示されます。
・headarはエラーメッセージ出力前に1回出力される。
・footerはエラーメッセージが全て出力後に1回出力される。
・suffixは各エラーメッセージの最後に出力される
・{0}はvalidation.xmlのarg0タグに設定したものが出力される。
Application.properties
#divstyle(background-color:#FFFFCC;width:400px;height:200px;overflow:auto;){{
errors.header=<font color=red>
errors.footer=</font>
errors.suffix=<br>
name=氏名
age=年齢
errors.required={0}を入力してください。
errors.integer={0}には数値を入力してください。
}}

【実行するとこんなカンジ】
&ref(output1.jpg)
&ref(output2.jpg)
&ref(output3.jpg)



合計:&counter()