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

7.3.4. 画面遷移

7.3.4.1. 画面遷移がある場合(登録、更新など)の実装例

画面遷移がある場合の概要と実装方法についての説明です。

  • 処理の流れ
  • Form の 2 度押し防止 – imuiDisableOnSubmit (セレクタ)
  • バリデーションチェック – imuiValidate
  • 確認ダイアログ表示 – imuiConfirm
  • Ajax でのデータ送信と画面遷移 – imuiAjaxSubmit

7.3.4.1.1. 画面遷移あり JSP (ヘッド情報)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
  <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
  <%@ taglib prefix="imui" uri="http://www.intra-mart.co.jp/taglib/imui"%>

  <imui:head>
    <title>新規登録画面</title>
    <!-- Load library -->
    <script src="ui/libs/jquery-validation-1.9.0/jquery.validate.js"></script>
    <script type="text/javascript">

      var rules = {
        textbox: {
          required:true,
          maxlength:20
        },
        textarea: {
          required:true
        }
      };

      var messages = {
        textbox: {
          required:"タイトルは必須です。",
          maxlength:"タイトルは20文字以内で入力してください"
        },
        textarea: {
          required:"テキストエリアは必須です。"
        }
      };

      (function($) {
        $(document).ready(function() {
          // Form の 2 度押し防止
          imuiDisableOnSubmit('#form');

          // 参照画面へ引き渡すキーの配列生成
          var optionalData = ['user_cd'];

          // 登録ボタンクリック
          $('#register-button').click(function() {

            // バリデーションチェック
            if (imuiValidate('#form', rules, messages)) {
              // 確認ダイアログ表示
              imuiConfirm(
                '<c:out value="message" />', // メッセージ
                '<c:out value="title" />' ,  // タイトル
                function() { // OKクリック時のコールバック関数
                  // Ajax でのデータ送信と次画面への遷移
                  imuiAjaxSubmit('#form', 'POST', 'json', 'example/tgfw/reference/list');
                }
              );
            }
          });
        });
      })(jQuery);
    </script>
  </imui:head>

7.3.4.1.2. 画面遷移あり JSP (画面タイトル/ツールバー/コンテンツエリア)

登録画面の実装サンプル を参照してください。
または、 更新画面の実装サンプル を参照してください。

コラム

imuiValidate を利用するときは、<input type=”submit”/> ではなく、<input type=”button”/> を利用してください。

7.3.4.2. 画面遷移がない場合の実装例

画面遷移がない場合の概要と実装方法についての説明です。

  • 処理の流れ
  • Form の 2 度押し防止 – imuiDisableOnSubmit (セレクタ)
  • バリデーションチェック – imuiValidate
  • 確認ダイアログ表示 – imuiConfirm
  • Ajaxでのデータ送信 – imuiAjaxSend

7.3.4.2.1. 画面遷移なし JSP (ヘッダー/フッター)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
  <imui:head>
    <title>更新/削除画面</title>
    <!-- Load library -->
    <script src="ui/libs/jquery-validation-1.9.0/jquery.validate.js"></script>
    <script type="text/javascript">

      var rules = {
        textbox: {
          required:true,
          maxlength:20
        },
        textarea: {
          required:true
        }
      };

      var messages = {
        textbox: {
          required:"タイトルは必須です。",
          maxlength:"タイトルは20文字以内で入力してください"
        },
        textarea: {
          required:"テキストエリアは必須です。"
        }
      };

      (function($) {
        $(document).ready(function() {
          // Form の 2 度押し防止
          imuiDisableOnSubmit('#form');

          // 参照画面へ引き渡すキーの配列生成
          var optionalData = ['user_cd'];

          // 更新ボタンクリック
          $('#update-button').click(function() {
            // バリデーションチェック
            if (imuiValidate('#form', rules, messages)) {
              // 確認ダイアログ表示
              imuiConfirm(
                '<c:out value="message" />', // メッセージ
                '<c:out value="title" />' ,  // タイトル
                function() { // OKクリック時のコールバック関数
                  // Ajaxでのデータ送信
                  imuiAjaxSend('#form', 'POST', 'json');
                }
              );
            }
          });
        });
      })(jQuery);
    </script>
  </imui:head>

7.3.4.3. Ajax 通信の利用方法

imuiAjaxSend, imuiAjaxSubmit を使用して Ajax 通信をする場合、呼び出し先のページでは処理成功時のメッセージ、処理失敗時のメッセージ、処理成功後に遷移するページへ引き渡すパラメータ、を返すことができます。

属性名 説明 必須
error 処理が失敗した場合 true、成功した場合 false を指定します。 boolean o
successMessage 処理成功時のメッセージ。error: false の場合表示されます。 String
errorMessage 処理失敗時のメッセージ。error: true の場合表示されます。 String
detailMessages 処理失敗時の詳細なメッセージ。error: true の場合表示されます。 String/String[]
parameter 処理成功後に遷移するページへ引き渡すパラメータ。 Object

7.3.4.3.1. parameter について

オブジェクトのキーを input タグの name 属性に、値を value 属性にセットして submit します。
値に配列を指定することが可能です。ただし、1 次元配列のみサポートします。

parameter の指定方法と、次画面での取得例は以下のようになります。
parameter の指定
Ajaxの処理を行うControllerの @RequestMapping メソッドで返り値のオブジェクトに parameter を設定します。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
    @RequestMapping(value = "register", method = RequestMethod.POST, produces = "application/json")
    @ResponseBody
    public Map<String, ? extends Object> ajax(RegisterForm form) {

        Map<String, Object> result = new HashMap<String, Object>();

        // 次の画面に渡すパラメータを設定します。
        Map<String, Object> parameters = new HashMap<String, Object>();
        List<String> arrayList = new ArrayList<String>();
        arrayList.add("element1");
        arrayList.add("element2");
        parameters.put("param1", "value1");
        parameters.put("param2", "value2");
        parameters.put("array1", arrayList);
        result.put("parameters", parameters);

        return result;
    }
次画面での取得(Controllerクラスで取得する)
1
2
3
4
5
6
7
8
9
@Controller
@RequestMapping("example/tgfw/reference")
public class NextController {

    @RequestMapping("list")
    public String list(@ModelAttribute ParamForm form) {
        return "example/tgfw/reference/list.jsp";
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
public class ParamForm {

    private String param1;

    private String param2;

    private List<String> array1;

    // getter, setter
    // ...
}
となります。

7.3.4.3.2. Ajax 実装例

コントローラークラスでは、@RequestMapping メソッドの実行結果をJSONとして応答するために、 メソッドに @ResponseBody を設定し、 メソッドの返り値をオブジェクトにします。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    @RequestMapping(value = "register", method = RequestMethod.POST, produces = "application/json")
    @ResponseBody
    public Map<String, ? extends Object> ajax(@Validated RegisterForm form, Errors errors) {

        Map<String, Object> result = new HashMap<String, Object>();
        // validationのエラー処理
        if (errors.hasErrors()) {
            // Errorsからメッセージを生成。
            // result.put("errorMessage", "エラーメッセージ");
            // result.put("detailMessages", {"詳細メッセージ1", "詳細メッセージ2", ... , "詳細メッセージn"});
            result.put("error", Boolean.TRUE);
            return result;
        }

        // 業務処理実行
        // ...

        // 正常終了
        result.put("error", Boolean.FALSE);
        // result.put("successMessage", "OK!");

        // 必要に応じて、次の画面に渡すパラメータを設定します。
        Map<String, Object> parameters = new HashMap<String, Object>();
        List<String> arrayList = new ArrayList<String>();
        arrayList.add("element1");
        arrayList.add("element2");
        parameters.put("param1", "value1");
        parameters.put("param2", "value2");
        parameters.put("array1", arrayList);
        result.put("parameters", parameters);

        return result;
    }