Javaで定義したメッセージをJavaScriptで使用する方法
前回は、Javaで定義した「定数」をJavaScriptで使用する方法を紹介した。
今回は、Javaで定義した「メッセージ」をJavaScriptで使用する方法を紹介する。
考え方は、Javaで定義した定数をJavaScriptで使用する方法と変わらない。
変わるのは、取得先がクラスから、propertiesファイルになることである。
<手順概要>
1.Java側にメッセージを連携するためのActionクラスを作成する
2.JSPでJavaScriptのソースとして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.JSPでJavaScriptのソースとして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で使用する方法
<お勧め書籍>