LoginSignup
13
13

More than 5 years have passed since last update.

SAStrutsでAjax使用時に、アノテーションの入力チェックエラーメッセージをJSONで返す

Last updated at Posted at 2014-01-14

SAStrutsでは、Formのプロパティにアノテーションを付与することで入力チェックが行えるが、Ajaxを使用する場合としない場合で実装方法を変える必要がある。

Ajaxを使用しない場合

Actionのメソッドに、入力チェックエラー時に遷移するJSPを指定する。

@Execute(validator = true, input = "index.jsp")
public String add() {
//処理
}

JSPでhtmlタグを使用することで、エラーメッセージを表示できる。

<html:erros/>

Ajaxを使用する場合

Ajaxを使用する場合は、JSPへの遷移が発生しないため、JSONでエラーメッセージを返す。

Actionのメソッドには、入力チェックエラー時に呼び出す「Actionのメソッド名」を指定する。
アノテーションによる入力チェックエラーが発生した場合は、ここで指定したメソッドが呼ばれるようになる。

@Execute(validator = true, input = "handlingError")
public String add() {
//処理
}

エラー時に呼び出し先として指定したエラーハンドリング用のメソッドを追加する。
ここでは、入力チェックエラー発生時にフレームワークによって格納されたエラーメッセージを取得し、JSON形式で返している。

@Execute(validator = false)
public String handlingError() {

    // Requestからエラーメッセージを取得する
    HttpServletRequest request = RequestUtil.getRequest();
    ActionMessages errors = (ActionMessages) request.getAttribute(Globals.ERROR_KEY);

    List<String> messageList = new ArrayList<String>();

    //エラーメッセージを取り出して、Listに設定
    Iterator iterator = errors.get();
    while (iterator.hasNext()) {
        ActionMessage message = (ActionMessage)iterator.next();
        String msg = MessageResourcesUtil.getMessage(message.getKey(),message.getValues());
        messageList.add(msg);
    }

    //リストをJSON形式に変換して、クライアントに返す。
    //JSON変換には、JSONICを使用している。
    ResponseUtil.write(JSON.encode(messageList));
    return null;
}

このように記載することで、クライアントにはエラーメッセージがJSON形式で返されるので、JavaScriptで適切にエラー表示を行う。

13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13