6.5.1. バリデーション¶
jQuery Validation を利用したクライアント側でのバリデーションをかけることができます。バリデーションをかける場合、通常はクライアント側とサーバ側の両方にバリデーションを実装します。Jssp Validator と連携すると、サーバ側に設定ファイルを書くだけでサーバ側とクライアント側の両方に共通なバリデーションを行います。なお、クライアント側だけで完結させることも可能です。この場合は、jQuery Validation の記述方法に則ったルール、メッセージをクライアント側で実装してください。
注意
Jssp Validatorはスクリプト開発モデルのみで利用できます。
項目
6.5.1.1. 前提¶
バリデーションは jQuery Validation Plugin を利用します。ライブラリは自動的に読み込まれません。バリデーションを利用する際は以下のような実装を行ってください。
1 2 3  | <imart type="head">
    <script src="ui/libs/jquery-validation-1.9.0/jquery.validate.js"></script>
</imart>
 | 
6.5.1.2. JSSP Validation と連携する場合¶
Jssp Validator の設定ファイルをクライアント側に読み込み、jQuery Validation Plugin の設定に変換することで、サーバ側とクライアント側とでバリデーションのルールを共有できます。共有するには、バリデーション設定ファイル の記述、imuiValidationRule タグの記述、imuiValidate 関数の呼び出しが必要です。
注意
JSSP Validationに独自に追加したバリデーションルールは、クライアント側で共有できません。
クライアント側で同じバリデーションを行いたい場合は、クライアント側でも同様のルールを定義してください。
クライアント側のカスタムバリデーションについては  クライアントサイド JavaScript  の imuiAddValidationRule を参照してください。
6.5.1.2.1. 実装例¶
以下のような HTML を例に取り、 user_cd に対して user_cd バリデーションをかけます。
1 2 3 4 5 6  | <div class="imui-form-container">
    <form id="sampleform" name="sampleform">
        <input type="text" name="user_cd"/>
        <input type="button" id="validate-button" value="validate"/>
    </form>
</div>
 | 
6.5.1.2.1.1. バリデーション設定ファイルの記述¶
項目 user_cd に対して userCd バリデーションをかける、というバリデーション設定ファイルを作成します。バリデーション設定ファイルとして以下のようなファイルを WEB-INF/jssp/src/validator/sample.js として保存します。設定ファイルの内容の詳細は バリデーションルール を参照してください。
1 2 3 4 5 6  | var init = {
    'user_cd': {
        caption: 'user_cd',
        userCd: true
    }
}
 | 
コラム
JSSP Validator の「 file 」「 mimeType 」ルールは クライアントサイド JavaScript バリデーション( imuiValidate )では動作しませんので注意してください。
6.5.1.2.1.2. imuiValidationRule タグの記述¶
上記で作成したバリデーション設定ファイルを読み込むために、imuiValidationRule タグを HTML に追記します。imuiValidationRule タグの rule 属性に、バリデーション設定ファイルのパスを指定します。また、後述の imuiValidate 関数の引数となる rulesName, messagesName 属性も指定します。
1 2 3 4 5 6 7 8 9 10  | <imart type="head">
    <script src="ui/libs/jquery-validation-1.9.0/jquery.validate.js"></script>
    <imart type="imuiValidationRule" rule="validator/sample#init" rulesName="rules" messagesName="messages"></imart>
</imart>
<div class="imui-form-container">
    <form id="sampleform" name="sampleform">
        <input type="text" name="user_cd"/>
        <input type="button" id="validate-button" value="validate"/>
    </form>
</div>
 | 
コラム
imuiValidationRule タグは script タグを出力するので、script タグの内部に書いてはいけません。
6.5.1.2.1.3. imuiValidation 関数の記述¶
バリデーションを実行するため、imuiValidate 関数の呼び出しを追記します。imuiValidate 関数の引数に、form の id 、 imuiValidationRule タグの rulesName 、 messagesName に指定した値の3つを指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17  | <imart type="head">
    <script src="ui/libs/jquery-validation-1.9.0/jquery.validate.js"></script>
    <imart type="imuiValidationRule" rule="validator/sample#init" rulesName="rules" messagesName="messages"></imart>
    <script type="text/javascript">
    jQuery(document).ready(function() {
        jQuery('#validate-button').click(function() {
            imuiValidate('#sampleform', rules, messages);
        });
    });
    </script>
</imart>
<div class="imui-form-container">
    <form id="sampleform" name="sampleform">
        <input type="text" name="user_cd"/>
        <input type="button" id="validate-button" value="validate"/>
    </form>
</div>
 | 
テキストボックスにひらがなを入力し、validate ボタンをクリックするとエラーが表示されます。
6.5.1.3. クライアント側だけで完結させる場合¶
クライアント側だけで完結させる場合、jQuery Validation Plugin のルール、メッセージの指定の仕方に則って実装します。使用できるバリデーションルールは、バリデーション設定ファイル と同様です。
6.5.1.3.1. 実装例¶
バリデーションのルールと、バリデーションの結果、チェックにかかった場合のメッセージを指定します。指定しない場合、メッセージは英語で表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  | var rules = {
  user_cd: {
    required: true,
    minlength: 5,
  }
};
var messages = {
  user_cd: {
    required:  '必須です',
    minlength: '少なくとも5文字必要です'
   }
};
imuiValidate(
  '#account',                      // 送信するフォームのID
  rules,                           // バリデーションルール
  messages                         // バリデーションメッセージ
);
 | 
上記のように指定した場合、user_cd のバリデーションルールに該当した際に、同じキーのメッセージが表示されます。
6.5.1.4. バリデーションをリセットする方法¶
- imuiValidate を実行すると、対象フォームに対し常にチェックをかけるようになるため、一度投稿処理をしてからでも、画面を再読込みしない限り常にチェックがかかります。
 この動作を変える必要がある場合、imuiResetForm メソッドでチェックをかけた form を初期化してください。
1 2 3 4 5 6 7 8 9  | ...
// バリデーションチェック
if (imuiValidate('#form', rules, messages)) {
  // バリデーションチェックに成功したら投稿処理
  doSomething();
  // バリデーションのリセット
  imuiResetForm('#form');
}
...
 | 

