Javaで定義したメッセージをJavaScriptで使用する方法

前回は、Javaで定義した「定数」をJavaScriptで使用する方法を紹介した。
今回は、Javaで定義した「メッセージ」をJavaScriptで使用する方法を紹介する。

考え方は、Javaで定義した定数をJavaScriptで使用する方法と変わらない。
変わるのは、取得先がクラスから、propertiesファイルになることである。

<手順概要>
1.Java側にメッセージを連携するためのActionクラスを作成する
2.JSPJavaScriptのソースとして1で作成したクラスのレスポンスを読み込む


<手順詳細>

[前提]
連携の対象となる「application_ja.properties」は、下記の内容とする。

message001=登録が完了しました。
message002=更新が完了しました。
message003=削除が完了しました。

1.Java側にメッセージを連携するためのActionクラスを作成する
actionパッケージに「MessageAction」クラスを作成する。

[ポイント]

  • ResourceUtilの「getProperties(<プロパティ名>)」メソッドでプロパティを取得する
  • Propertiesの「keys()」メソッドでキーの一覧を取得する
  • レスポンスに名称付きのJSONデータを返す
package jp.co.smp.cnst.action;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Properties;
import net.arnx.jsonic.JSON;
import org.seasar.framework.util.ResourceUtil;
import org.seasar.struts.annotation.Execute;
import org.seasar.struts.util.ResponseUtil;

public class MessageAction {

	//メッセージの取得先プロパティ
	private static final String MESSAGE_PROPERTIES = "application_ja.properties";

	//結果に付加する変数名
	private static final String JSON_NAME = "java_message=";

	@Execute(validator = false)
	public String getJavaMessage() {

		//メッセージのキーと内容の組み合わせを格納するためのマップ
		HashMap<String, Object> resultMap = new HashMap<String, Object>();

		//メッセージプロパティの取得
		Properties properties = ResourceUtil.getProperties(MESSAGE_PROPERTIES);
		
		//キーの一覧を取得
		Enumeration<Object> keys = properties.keys();

		//全てのキーを対象にキーと内容をマップに格納する
		while (keys.hasMoreElements()) {

			//キーを取得する
			String key = (String) keys.nextElement();
			
			//キーに対応する内容を取得する
			String value = properties.getProperty(key);

			resultMap.put(key, value);
		}

		//JSON形式のデータに名称をつけて結果データを作成する
		String result = JSON_NAME + JSON.encode(resultMap);

		//レスポンスの設定
		ResponseUtil.write(result, "application/javascript");

		return null;
	}
}


HashMapからJSONへの変換は、「JSONIC」ライブラリを使用している。
使用するには、ビルドパスにライブラリとして登録する必要がある。
JSONIC公式サイト


2.JSPJavaScriptのソースとして1で作成したクラスのレスポンスを読み込む

[ポイント]

  • scriptタグの「src」に1で作成したアクションを指定する
  • 定数を使用したい時は「java_message.」+「使用するメッセージ名(キー)」で参照する
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<%-- ↓↓↓↓↓ ポイント ↓↓↓↓↓ --%>

<script type="text/javascript" src="./message/"></script>

<%-- ↑↑↑↑↑ ポイント ↑↑↑↑↑ --%>

<script type="text/javascript">
function onExec(){
	alert("java_message.message001:" + java_message.message001);
}
</script>

<title>Java,JavaScriptメッセージ共通化</title>
</head>
<body>

<input type="button" value="実行" onclick="onExec()" />

</body>
</html>

<実行結果>

初期表示時のChrome「要素を検証(N)」の結果

<関連記事>
Javaで定義した定数をJavaScriptで使用する方法
Javaで定義したメッセージをJavaScriptで使用する方法

<お勧め書籍>