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で適切にエラー表示を行う。