SAStrutsでリアルタイム入力チェック

みたいなやつを最近作っている。まだ出来てないけど。

きっかけ

最近システム開発でもリッチクライアントが流行ってきていて、onBlurした時点で入力チェックすることを求められることが増えてきている(気がする)。
でライブラリを探してみるとjQueryプラグインとか色々とあるんだけど、クライアントだけで完結しているライブラリばっかりしかなくて、サーバで出来る入力チェックとルールが違って微妙に使いにくい。設計とかしにくいし。

クライアントのチェックでは出来るけど、サーバではチェックルールがなくて出来ないとか、その逆も叱りだったり。なので、サーバサイドで設定したチェックルールを使って、onBlurした時点で、入力チェックしてくれるJavaScriptを出力するのを作ろうと思ったのがきっかけ。

SAStrutsを使っているのは、タグを拡張すれば比較的簡単に出来るだろうというところから。あと、だいぶ枯れてきているみたいで、変更が少ないってのもある。


余談だけど、SAStruts(むしろStruts)では、元々submitボタンを押した時点でJavaScriptで入力チェックしてくれる機能があるんだけど、結局ボタンを押した時しかチェックできないのでそれほどうれしくない。接続数がすごく多いシステムだと、サーバに投げる前にチェックを出来るのでうれしいかもしれないけど、そうでない場合は、JSPにJavaScriptが大量に吐かれるので逆に悲しい。

@ITのSAStrutsの連載で
http://www.atmarkit.co.jp/fjava/rensai4/saweb03/saweb03_2.html#03

実業務でほとんど見たことはないのですが、StrutsではJavaScriptを使用してクライアントサイドでもバリデーションができます。

なんて書かれている。

どんな感じに使うの?

入力チェックルールは、SAStrutsで設定した入力チェックのアノテーションを使用して自動でJavaScriptを生成する。

入力チェックは普段と同じように以下のように記述してもらえばOK。

public class ValidateForm {

    @Required
    @ByteType
    public String byteText;

    @Required
    @ShortType
    public String shortText;

    @Required
    @IntegerType
    public String integerText;
}

でJSPではJavaScriptとCSSの読み込みと

<script src="${f:url('/js/jquery-1.3.2.min.js')}"></script>
<script src="${f:url('/js/s2validator.js')}"></script>
<link rel="stylesheet" type="text/css" href="${f:url('/css/baloon.css')}">

カスタムタグの設定をするだけ

<v:javascript formName="validateActionForm_submit"/>

入力チェック自体は、s2validator.jsの中で行う。
タグが自動生成したJavaScriptのコードからs2validator.jsを呼び出す感じ。

s2validator.jsや自動生成するコードはjQueryを使っている。
jQuery使うと微妙かなとか思いながらも、jQuery便利だよ!ってことで使っている。

動作イメージはどんな感じ?

こんな感じ。

エラーメッセージはブランクプロジェクトにあるapplication_ja.propertiesのを使っているんだけど、
「短整数でなければいけません」って微妙だよね。短整数でお客さんわかるのかな。

残りの作業

  1. テスト(JS自体、チェックルールの組み合わせ、デザイン)
  2. リリースする場所の確保(SourceForgeかGoogleCodeとか)
  3. チェックルールの追加(全角とか半角とか)

JSUGの勉強会でSpring 3.0について話すことになるかもしれないとか、仕事で中国出張とかDQ9がまだ中盤とか色々立て込んでいるので、すぐにはリリースできないかもしれないですが、ボチボチ作っていきますので、宜しくお願いします。