intra-mart Accel Platform UIデザインガイドライン(PC版) 第6版 2022-12-01

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に独自に追加したバリデーションルールは、クライアント側で共有できません。
クライアント側で同じバリデーションを行いたい場合は、クライアント側でも同様のルールを定義してください。
クライアント側のカスタムバリデーションについては クライアントサイド JavaScriptimuiAddValidationRule を参照してください。

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');
}
...