1.2からのActionMessagesの使い方

昨日、Struts1.2からは ActionError/ErrorsがDeprecatedになると書きましたが、サンプルコードをちょこっとのせときます。
まず、アクションのクラス:


ActionMessages errors = new ActionMessages();
errors.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("error.doing.something"));
saveErrors(request, errors);
//メッセージの場合は saveMessages(request, errors);
ポイント:

  • ActionErrorsがActionMessagesに、ActionErrorがActionMessageに。
  • ActionErrors.GLOBAL_ERRORもDeprecatedなので、ActionMessages.GLOBAL_MESSAGESに。

saveMessages(request, errors)の部分についてですが、

  • 1.2からはsaveMessages(javax.servlet.http.HttpSession session, ActionMessages messages)と、リクエストにかわってセッションスコープに保存することができるようになりました。セッション内のメッセージは最初に使った後にクリーンアップされます。
  • org.apache.struts.action.ActionのsaveErrors (javax.servlet.http.HttpServletRequest request, ActionErrors errors)も同じくDeprecatedになり、1.2からはsaveErrors(javax.servlet.http.HttpServletRequest request, ActionMessages errors)ができて、<html:errors>タグでもリクエストスコープからエラーメッセージを取り出すことができます。(デザイン的なコントロールがきくので、<html:errors/>よりも<html:messages>を使うように推奨しています)

JSPページでは次のようにエラー/メッセージを取り出します。


//エラーをとりだす場合
<logic:messagesPresent message="false">
<html:messages id="error" message="false">
${error} ←ELを使わないなら<bean:write name="error" />
</html:messages>
</logic:messagesPresnet>

//メッセージをとりだす場合
<logic:messagesPresent message="true">
<html:messages id="message" message="true">
${message}
</html:messages>
</logic:messagesPresnet>

ようは、messageがtrueかfalseでメッセージかエラーかを判断するのです。