Struts2が扱えるメッセージの種類
Struts2はアプリケーションが画面に表示するメッセージをいくつかの種類にわけて管理しています。メッセージは文字列で直接記述する方法やプロパティファイルにてメッセージコードを指定する方法が選べます。
複数のメッセージを設定できますし、複数の領域も同時に使えます。
メッセージの種類
メッセージを出力するには、ActionクラスがActionSupportクラス(またはActionSupportを継承したクラス)を継承して、メッセージの種類ごとに用意されているActionSupportのメソッドを実行します。
Struts2が標準で扱えるメッセージの種類は以下のとおりです。
種類 | ActionSupportのメソッド | 用途 |
---|---|---|
通常メッセージ | addActionMessage | 通常メッセージを設定 |
エラーメッセージ | addActionError | エラーメッセージを設定 |
項目エラーメッセージ | addFieldError | 入力項目に対するエラーメッセージを設定 |
メッセージの設定方法
メッセージの本文を設定する方法は2種類あります。
- メソッドの引数に直接文字列を記述する
- プロパティファイルに定義した文字列を指定する
ActionSupportにはプロパティファイルから指定した文字列を取得するgetText(プロパティ名)があり、メッセージの本文をプロパティファイルに定義できます。メッセージの文言を別管理にして変更しやすくしています。
なお、読み込むプロパティファイルの指定方法は、struts.xmlにて次の設定を記載します。
<struts>
<!-- アプリケーション共通プロパティファイル名。拡張子は不要。 -->
<constant name="struts.custom.i18n.resources" value="commons,message,twitter" />
</struts>
- プロパティファイルは/WEB-INF/classesに配置
- プロパティファイルは必ず拡張子が .properties であること
- 複数のプロパティファイルを指定するにはカンマ区切りで指定
例えばmessage.propertiesに次のメッセージ文字列を登録しておき、
register.complete=登録が完了しました。
Actionクラスからこのメッセージを出すには、
public class MessageAction extends ActionSupport {
public String start() throws Exception {
// 通常メッセージを定義
addActionMessage(getText("register.complete"));
// SUCCESSの画面へフォワード
return SUCCESS;
}
}
のように、2つのメソッドを組み合わせます。
動的メッセージ、プレースホルダーの利用
メッセージの種類を問わず、プレースホルダーを使った動的メッセージも設定できます。
例えば同様にmessage.propertiesに以下のように定義しておき、
register.complete={0}さん、タスク番号{1}の登録が完了しました。
{0}や{1}にはActionクラスから値を渡しておくと…
public class MessageAction extends ActionSupport {
public String start() throws Exception {
// プレースホルダに指定する値
List<String> holder = Arrays.asList("カピバラ","35");
// 通常メッセージを定義
addActionMessage(getText("register.complete" , holder));
// SUCCESSの画面へフォワード
return SUCCESS;
}
}
こうすることで、通常メッセージは
カピバラさん、タスク番号35の登録が完了しました。
となります。
項目エラー(FieldError)の扱い方
項目エラー(FieldError)は、入力項目(リクエストパラメータ)ごとに指定可能です。例えば項目名(name)がusernameに対して項目エラーメッセージを追加するには、
// 直接文字列を記載
addFieldError("username", "項目エラーです");
// プロパティから文字列を取得
addFieldError("username", getText("username.error"));
となります。
ただしActionクラスで直接項目エラーを記述することは極めて稀なケースで、実際にはValidationによる自動設定をするか、またはCustomValidationを作成した中で、項目エラーの追加をする際に利用します。