広告 |
---|
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 2009年12月27日 Java総合講座 - 初心者から達人へのパスポート vol.185 セルゲイ・ランダウ バックナンバー: http://www.flsi.co.jp/Java_text/ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ------------------------------------------------------- ・現在、このメールマガジンは以下の2部構成になっています。 [1] 当初からのコース:毎週日曜の夜に発行 これは現在、中級レベルになっています。 [2] 2009年11月開講コース:毎週水曜の夜に発行 これは現在、初心者向けのレベルになっています。 ・このメールマガジンは、画面を最大化して見てください。 小さな画面で見ていると、不適切な位置で行が切れてしまう など、問題を起すことがあります。 ・このメールマガジンに掲載されているソース・コード及び 文章は特に断らない限り、すべて筆者が著作権を所有してい ます。また、これらのソース・コードは学習用のためだけに 提供しているものです。 ------------------------------------------------------- ======================================================== ◆ 01.Strutsのアプリケーション開発 ======================================================== では、最後にvalidation.xmlのソースを見てみましょう。これは、Validatorプラグイン による検証の内容を記述するためのものです。 -------------------------------------------------------- <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> <form-validation> <global> </global> <formset> <form name="etoForm"> <field property="year" depends="required,integer"> <arg key="year" resource="false" /> </field> </form> </formset> </form-validation> -------------------------------------------------------- このうち、今回編集した部分は<formset>と</formset>で囲まれた部分です。 ここには複数のフォームの検証内容を指定することができますが、今回は etoFormというフォームしか使用していませんので、一つのフォームの 検証内容だけを指定してあります。そしてフォームの検証内容は、 <form name="etoForm"> <field property="year" depends="required,integer"> <arg key="year" resource="false" /> </field> </form> という形式で記述しています。このうち、<form name="etoForm">と </form>で囲んでいる部分がetoFormというフォームの検証内容を記述 する部分ということになります。 もちろんname="etoForm"という属性の指定が、etoFormという名前の フォームに関する検証内容を記述することを意味しています。 そして、そのフォーム内の各フィールドの検証内容を<field>タグで記述す るのですが、etoFormにはyearというフィールドしかありませんので、 property="year"と指定した<field>タグしかありません。 また、この<field>タグにおけるdepends="required,integer"という指定は、 このフィールドの値が「必要である(required)」ことと「整数である (integer)」ことを検証対象として指定しています。 したがって、yearの値が入力されなかった場合はrequiredに反するので 不正と見なし、あるいは整数以外の値が入力された場合はintegerという 指定に反するので不正と見なすことになります。 そして不正と見なされた場合は、エラー・メッセージを返すことになります。 <arg>というタグは、そのフィールドの値が不正だったときに返すメッセージ の引数に関する情報を指定するためのものです。 ここでは、key="year"という指定があるので、引数にyearという値を渡す ことになります。 なお、key="year"に指定したyearがメッセージにそのまま渡したい引数では なく、そのキーをプロパティー・ファイルで調べて別の値に変換して渡した い場合は、resource="true"という指定にしますが、今回は直接yearという値 を引数として渡したいので、resource="false"という指定にしています。 あと、全フォームを通して使用したいコンスタント(定数)などがある場合、 そのコンスタントの定義を<global>と</global>ではさみますが、これについ ては、また後ほど説明いたします。 ┌補足─────────────────────────┐ validation.xmlの詳細も含めて、Strutsを独力で学習したい人は、 Webページ http://struts.apache.org/1.x/userGuide/ などを参照して下さい。 └───────────────────────────┘ では、そのメッセージの引数というのが実際のメッセージの中でどのように なっているのかを確認するために、そのメッセージのファイルを見てみま しょう。 プロジェクト・エクスプローラー内のStrutsEtoTest(プロジェクト)配下の 「Javaリソース:src」フォルダーの配下にあるMessageResources.properties を開いてみて下さい。 ここには、Strutsのサンプルとして提供されているメッセージがはいっています。 (StrutsIDEプラグインが自動的に組み込んだものです。) -------------------------------------------------------- # -- standard errors -- errors.header=<UL> errors.prefix=<LI> errors.suffix=</LI> errors.footer=</UL> # -- validator -- errors.invalid={0} is invalid. errors.maxlength={0} can not be greater than {1} characters. errors.minlength={0} can not be less than {1} characters. errors.range={0} is not in the range {1} through {2}. errors.required={0} is required. errors.byte={0} must be an byte. errors.date={0} is not a date. errors.double={0} must be an double. errors.float={0} must be an float. errors.integer={0} must be an integer. errors.long={0} must be an long. errors.short={0} must be an short. errors.creditcard={0} is not a valid credit card number. errors.email={0} is an invalid e-mail address. # -- other -- errors.cancel=Operation cancelled. errors.detail={0} errors.general=The process did not complete. Details should follow. errors.token=Request could not be completed. Operation is not in sequence. # -- welcome -- welcome.title=Struts Blank Application welcome.heading=Welcome! welcome.message=To get started on your own application, copy the struts-blank.war to a new WAR file using the name for your application. Place it in your container's "webapp" folder (or equivalent), and let your container auto-deploy the application. Edit the skeleton configuration files as needed, restart your container, and you are on your way! (You can find the application.properties file with this message in the /WEB-INF/src/java/resources folder.) -------------------------------------------------------- これらのうち、errors.required=で始まる行が、先ほどのvalidation.xmlで指定 したrequiredに対するエラー・メッセージで、errors.integer=で始まる行が integerに対するエラー・メッセージです。 たとえば、requiredに対する不正に関しては {0} is required. というエラー・メッセージが返されることになりますが、このうち{0}という 部分が引数であり、validation.xmlの中のkey="year"で指定したyearという 値がこの{0}の部分に置き換えられ、結果的には year is required. というメッセージが返されることになります。 なお、このMessageResources.propertiesの中には{0}の他に{1}や{2}などの 複数の引数を持つメッセージもありますが、複数の引数に対するvalidation.xml の指定の仕方については、また後述します。 ここで、最後に、エラー・メッセージに赤色をつけて、目立つようにする という修正を行っておきましょう。やり方はいろいろありますが、今回は 安直なやり方として、このMessageResources.propertiesの中の errors.required={0} is required. の行を下記のように編集して下さい。 errors.required=<font color="red">{0} is required.</font> つまり、文字を赤色にするようにHTMLのfontタグを追加するわけです。 また、 errors.integer={0} must be an integer. の行についても同様の編集を行ってみて下さい。 編集が終わりましたらファイルを保管し、アプリケーションをテストして みて下さい。 なお、Eclipseのプロジェクト・エクスプローラー内のStrutsEtoTest を右クリックし、「実行」→「サーバーで実行」を選択し「完了」ボタン をクリックすると、Tomcatのサーバーの起動からWebブラウザーの起動まで 自動的に行ってくれます。 テストしてみると、ちゃんとエラー・メッセージが赤色になることが分かり ますね。 ただし、このやり方はあくまで安直なやり方であり、好ましいやり方では ありません。たとえば、Validatorプラグインにはクライアント側(Webブラ ウザー側)でも入力データの検証を行う機能があるのですが、この機能を 使った場合に不都合が生じます。 実際にやってみましょう。 index.jspを下記のように修正してみて下さい。 -------------------------------------------------------- <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-nested" prefix="nested" %> <html:html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>干支(十二支)</title> </head> <body> <h1>干支(十二支)を調べる</h1> <html:javascript formName="etoForm" /> <html:form method="POST" action="/eto" onsubmit="return validateEtoForm(this)"> <br> 干支を調べたい年: <br> <html:text property="year" size="5" /> <br> <html:errors /> <html:submit property="submit" value="送信" /> </html:form> </body> </html:html> -------------------------------------------------------- ここで変更したのは、 <html:javascript formName="etoForm" /> という行を追加したことと、 <html:form method="POST" action="/eto"> の行にonsubmit="return validateEtoForm(this)"という属性を追加したことです。 これだけで、クライアント側でも入力データの検証が(JavaScriptによって)行わ れるようになるのです。自分でJavaScriptのプログラムをコーディングしなくて 済むので随分と楽ができますね。 では、このファイルを保管した後、テストしてみて下さい。 確かに入力データを空にしたり、整数以外の文字列を入力すると、Webブラウザー側で 直接、エラー・メッセージを(「Webページからのメッセージ」ウインドウで)表示し てくれますね。 しかし、このエラー・メッセージには、先ほど追加したHTMLのfontタグがそのまま 文字列として表示されてしまい、不都合であることがわかります。 そこで、こういったfontタグのようにメッセージを修飾(飾り立て)したいタグを入れる 場所は別に用意されています。それがMessageResources.propertiesの先頭の ほうにあるerrors.header、errors.prefix、errors.suffix、errors.footerというプロパ ティーですが、これらの使い方はまた後ほどお話いたします。 ところで、これまでメッセージを英語のまま使ってきましたが、メッセージ を英語ではなく日本語にしたいときはどうしたらよいかというと、日本語の メッセージを直接このプロパティー・ファイルに書き込んでは駄目で、以前 (vol.145で)お話したように、事前にnative2asciiを使って日本語の文字 からUnicodeエスケープに変換しておいてやる必要があります。 こういった日本語化の話は、また後ほどお話いたします。 以上で、ソースの内容は一通り理解できたことと思います。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ では、これから、少し本格的なアプリケーションを作成して、Strutsを詳しく 学んでいきましょう。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ (次回に続く) では、今日はここまでにします。 ================================================ ◆ 02.演習問題 ================================================ これまではTomcatのVersion 5.5を使ってきましたが、それは、LinuxのPCの ほうにTomcatのVersion 5.5をインストールしてあるためです。(後ほど 作成するStrutsのアプリケーションをLinuxのPCのTomcatで実行します。) しかし、今回までに作成した干支を算出するStrutsのアプリケーション はTomcatのVersion 6でも実行可能です。そのことをEclipse上で確認 してみて下さい。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ★ホームページ: http://www.flsi.co.jp/Java_text/ ★このメールマガジンは 「まぐまぐ(http://www.mag2.com)」 を利用して発行しています。 ★バックナンバーは http://www.flsi.co.jp/Java_text/ にあります。 ★このメールマガジンの登録/解除は下記Webページでできます。 http://www.mag2.com/m/0000193915.html ★このメールマガジンへの質問は下記Webページにて受け付けて います。わからない所がありましたら、どしどしと質問をお寄 せください。 http://www.flsi.co.jp/Java_text/ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ Copyright (C) 2009 Future Lifestyle Inc. 不許無断複製 |