複数のメッセージをいろいろ事情があって場合分けしたい場合
<環境>
struts 1.2
Java5
Eclipse Indigo
<内容>
条件1にヒットするとActionMessages.GLOBAL_MESSAGEにセットされたメッセージを画面の一か所に表示。
条件2にヒットするとActionMessages.GLOBAL_MESSAGEとhogeにセットされたメッセージを画面にそれぞれ二か所に表示。
条件3にヒットするとfooにセットされたメッセージを画面に表示。
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) { ActionErrors actionErrors = new ActionErrors(); if(条件1){ ActionMessages messages = new ActionMessages(); messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("条件1エラーです")); actionErrors.add(messages); } else if (条件2){ ActionMessages messagesTitle = new ActionMessages(); messagesTitle.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("条件2エラー_タイトルです")); ActionMessages messagesDetail = new ActionMessages(); messagesDetail.add("hoge", new ActionMessage("条件2エラー_詳細です")); actionErrors.add(messagesTitle); actionErrors.add(messagesDetail); } else if (条件3){ ActionMessages messages = new ActionMessages(); messages.add("foo", new ActionMessage("条件3エラーです")); actionErrors.add(messages); } saveErrors(req, actionErrors); return (mapping.findForward("gamen")); }
jsp側
<html:html lang="ja"> <head> </head> <body> <div class="title"> <logic:messagesPresent message="false"> <div class="error"> <html:errors property="org.apache.struts.action.GLOBAL_MESSAGE" /> <html:errors property="foo" /> </div> </logic:messagesPresent> </div> <div class="detail"> <div>詳細はこちら</div> <BR> <logic:messagesPresent message="false"> <div class="error"> <html:errors property="hoge" /> </div> </logic:messagesPresent> <BR> </div> </body> </html:html>
<結果>
エラーのタイプ(この場合ActionMessagesのプロパティ属性)の数が少ない場合にproperty指定でそれぞれ表示させることが可能。
一番よく使われていそうなActionMessages.GLOBAL_MESSAGEは文字をそのまま渡してみたところちゃんと表示された。
でもproperty="org.apache.struts.action.GLOBAL_MESSAGE"ってあんまり使わなさそうだなぁ。