サーバ再起動不要のSMART deployとバリデーション:Java初心者が超俊敏にWebアプリを作る方法(3)(2/2 ページ)
Eclipseプラグイン「Dolteng」のScaffoldという自動生成機能やSeasar 2.4のHOT deploy機能を利用して、DBの参照・更新・削除ができるSAStrutsのWebアプリを作ります。Java初心者だけでなくStrutsに慣れた開発者も必見です
SAStrutsでのバリデーション設定もアノテーションで
では、SAStrutsではどうでしょうか? 前回とは違い、SAStrutsのバリデーションはアノテーションのみで行います。連載第1回からのDoltengで作成されたFormクラスは以下のようになっています(設定に必要な個所のみ抜粋して掲載)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
これに先ほどのStrutsで定義した機能をアノテーションで加えると、以下のようになります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
3つの定義なので、3行で済みました!
Eclipse上で書けるからコード補完も
また、SAStrutsはJavaコード上のアノテーションなのでEclipse上で書くことができ、非常に簡単に入力できます。例えば、先頭の文字をいくつか入力するだけで、Eclipseの機能でコード補完もできます。
柔軟なSAStrutsのバリデーション機能
SAStrutsのバリデーション機能はStrutsと同等のものでありながら使い方を簡単にしているものがたくさんあります。いくつか紹介しましょう。
バリデーション用アノテーションがいっぱい
SAStrutsでは、Strutsで標準で定義されているバリデーションルールと同等の以下のアノテーションが用意されています。
アノテーション | 概要 |
---|---|
Required | 必須チェック |
Validwhen | 条件文 |
Minlength | 最小文字数チェック |
Maxlength | 最大文字数チェック |
Minbytelength | 最小バイト数チェック |
Maxbytelength | 最大バイト数チェック |
Mask | 正規表現を使う |
ByteType | byteに変換可能かどうかチェック |
ShortType | shortに変換可能かどうかチェック |
IntegerType | integerに変換可能かどうかチェック |
LongType | longに変換可能かどうかチェック |
FloatType | floatに変換可能かどうかチェック |
DoubleType | doubleに変換可能かどうかチェック |
DateType | 日付型かどうかチェック |
CreditCardType | クレジットカード形式かどうかチェック |
EmailType | eメールのアドレス形式かどうかチェック |
UrlType | URLの形式かどうかチェック |
IntRange | 数値がintの範囲内で収まるかどうかチェック |
LongRange | 数値ががlongの範囲内で収まるかどうかチェック |
FloatRange | 数値がfloatの範囲内で収まるかどうかチェック |
DoubleRange | 数値がdoubleの範囲内で収まるかどうかチェック |
表2 SAStrutsに用意されているバリデーション用アノテーション |
byteやintegerなど変数の型やその数値の範囲について詳しく知りたい読者は下記記事が参考になります。
新しいバリデーションルールをアノテーションで追加できる
Strutsでバリデーションルールを追加できたように、SAStrutsでも新しいバリデーションルールを記述し、そのルールに対応するアノテーションを開発者が作成すれば、追加の条件を簡単に定義できます。
Strutsのvalidateメソッドは?
Strutsでは、validateメソッドを使用してJava側で追加のバリデーションを書くことができました。業務上、存在チェックや複雑なチェックを行うときにはこのメソッドをオーバーライドして使用したと思います。
SAStrutsでは、前回紹介したActionクラスにある@Executeアノテーションでバリデーションのメソッドを指定できます。DeptActionのinsertメソッドの@Executeアノテーションを見てください。以下のように定義されています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この場合、validateInsertがバリデーションメソッドとして呼ばれます。
エラー時の遷移指定
inputに定義されている値は、バリデーションエラーがあった場合に遷移するページです。これもStrutsではstruts-config.xmlで定義されていましたが、アノテーションの属性値で簡単に設定できます。
バリデーションを行いたくないときは、DeptActionのindex()メソッドやlist()メソッドに定義されているように、@Executeアノテーションの属性値に「validator = false」とするだけでOKです。
注意! 「Doltengで生成されたFormはすべてString」
すでにお気付きかもしれませんがDoltengで生成されたFormはすべてStringになっています。これは、リクエストが来たときにバリデーションなどのエラーがあっても値を格納できるようにするためです。
例えば、もしDeptFormでdeptNoがIntegerと宣言されていたら、ユーザーが数字以外の文字を入力してしまったときに値が保存できなくなってしまうからです。Formで定義される値はStringにしておく方がいいでしょう。
クライアントサイドのバリデーションも
実業務でほとんど見たことはないのですが、StrutsではJavaScriptを使用してクライアントサイドでもバリデーションができます。もちろん、SAStrutsでもこの機能を使用できます。検証用のJavaScriptを出力するためには、
例えば、insertメソッドに付加する場合は「
これだけで、クライアントサイドでチェックできます。このバリデーションでチェックできる範囲はバリデーションルールで定義されている範囲です。
シンプルでスマートなバリデーションを
今回は、前回残っていたバリデーションの設定についてStrutsとSAStrutsの比較を紹介しました。SAStrutsでは、Strutsのバリデーションで設定ファイルを何行も書いていたのがうそのように簡単に定義できました。
StrutsのXML設定ファイルでは、文字チェック機能がないため誤字などのミスによって何度も再起動してテストしていたり、1つの設定でも数行の記述が必要で、ダラダラ書いていた設定の中でどれが何の対象なのか見つけにくいものだったりしたことと思います。SAStrutsでは、Eclipseのコード補完機能をフルに使って速く、正確に書くことができ、さらに、Eclipseのチェックによって不正な誤字などの入力もありません。それでいて、Strutsの柔軟なバリデーション機能を失っていないのです。
いままで「Strutsのバリデーションは設定ファイルを書くのが面倒だ」とvalidateメソッドにすべてを記述して冗長なJavaロジックを書いていた人にもシンプルでスマートに利用できると思います。ぜひバリデーションも簡単に記述できるSAStrutsを利用してみてはいかがでしょうか。
また今回は、冒頭で、SMART deployやHOT deployについて解説しました。HOT deployはソースコードがアプリケーションサーバの再起動なく反映されるので、スクリプト言語のようにすぐに修正→確認できるため、ストレスなく俊敏に開発を進めることができるので、非常にお勧めです。
次回はJSPについて解説したいと思います。SAStrutsのカスタムタグや用意されたファンクションなどJSPにかかわる部分について、SAStrutsのEclipseプラグインも含めて解説したいと思います。次回もお楽しみに!
筆者紹介
所属:
株式会社パワーエッジ
AD事業部(Application Development事業部)
新田 智啓(しんでん ともひろ)
SAStrutsコミッタ
Seasarプロダクトのsandboxで新たにS2Csvのプロダクトを公開。業務で汎用的に使えるように更新中。
Copyright © ITmedia, Inc. All Rights Reserved.