Log.log(work)

いろんな作業メモ

複数のメッセージをいろいろ事情があって場合分けしたい場合

<環境>
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"ってあんまり使わなさそうだなぁ。