連載
» 2008年12月18日 00時00分 公開

サーバ再起動不要のSMART deployとバリデーションJava初心者が超俊敏にWebアプリを作る方法(3)(2/2 ページ)

[新田智啓,株式会社パワーエッジ]
前のページへ 1|2       

SAStrutsでのバリデーション設定もアノテーションで

 では、SAStrutsではどうでしょうか? 前回とは違い、SAStrutsのバリデーションはアノテーションのみで行います。連載第1回からのDoltengで作成されたFormクラスは以下のようになっています(設定に必要な個所のみ抜粋して掲載)。

public class DeptForm {
…【略】…

    public String deptNo;

    public String deptName;

…【略】…
}

 これに先ほどのStrutsで定義した機能をアノテーションで加えると、以下のようになります。

public class DeptForm {
…【略】…

    @Required
    @IntegerType
    public String deptNo;

    @Maxlength(maxlength=20)
    public String deptName;

…【略】…
}

 3つの定義なので、3行で済みました!

Eclipse上で書けるからコード補完も

 また、SAStrutsはJavaコード上のアノテーションなのでEclipse上で書くことができ、非常に簡単に入力できます。例えば、先頭の文字をいくつか入力するだけで、Eclipseの機能でコード補完もできます。

図3 アノテーションのコード保管 図3 アノテーションのコード保管

柔軟な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アノテーションを見てください。以下のように定義されています。

@Execute(input = "create.jsp", validate = "validateInsert")

 この場合、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を出力するためには、タグを使います。formName属性には、「アクション名+Form_+メソッド名」を指定します。

 例えば、insertメソッドに付加する場合は「」となります。さらに、Strutsのサブミットボタンで「」となっているところを「」と変えます。

 これだけで、クライアントサイドでチェックできます。このバリデーションでチェックできる範囲はバリデーションルールで定義されている範囲です。

シンプルでスマートなバリデーションを

 今回は、前回残っていたバリデーションの設定について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のプロダクトを公開。業務で汎用的に使えるように更新中。

著者ブログ(newta)



前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。