ValidateのActionMessageを指定したキーで登録する

ActionMessages

SAStrutsではActionクラスでオリジナルの検証をメソッドにして@Executeのvalidate属性にしていします。検証がNGだった場合はActionMessagesにメッセージを詰め込んで、ActionMessagesExceptionをスローします。スローされた、ActonMessagesExceptionはActionMessagesThrowsInterceptorにより、リクエストに登録されます。


そのときの、キーは

String org.apache.struts.Globals.ERROR_KEY = "org.apache.struts.action.ERROR"

になります。


また、メッセージは

String org.apache.struts.action.ActionMessages.GLOBAL_MESSAGE = "org.apache.struts.action.GLOBAL_MESSAGE"

をキーに登録されます。

メッセージの登録キーを指定したい

メッセージの登録キーを指定することで、Validator(アノテーション)で検証した際のメッセージとActionクラスからスローした場合のメッセージを同じキー*1でとれたら、良いんじゃというアドバイスがあったので、ActionMessagesExceptionをちょっと改良してコンストラクタでメッセージのキーを指定できるようにして使うことにしました。*2

jspからは

<html:messages id="error" message="false"
               property="name">
               <span class="error_font">${error}</span>
</html:messages>

のような形で表示できます。((ErrorsタグよりもMessagesタグのほうがデザインの自由度があがる))

*1:html:textタグなどのproperty

*2:Interceptorも改良版用のものを作成