0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Actionクラスが扱うメッセージの種類と出力

Posted at

Struts2が扱えるメッセージの種類

Struts2はアプリケーションが画面に表示するメッセージをいくつかの種類にわけて管理しています。メッセージは文字列で直接記述する方法やプロパティファイルにてメッセージコードを指定する方法が選べます。
複数のメッセージを設定できますし、複数の領域も同時に使えます。

メッセージの種類

メッセージを出力するには、ActionクラスがActionSupportクラス(またはActionSupportを継承したクラス)を継承して、メッセージの種類ごとに用意されているActionSupportのメソッドを実行します。

Struts2が標準で扱えるメッセージの種類は以下のとおりです。

種類 ActionSupportのメソッド 用途
通常メッセージ addActionMessage 通常メッセージを設定
エラーメッセージ addActionError エラーメッセージを設定
項目エラーメッセージ addFieldError 入力項目に対するエラーメッセージを設定

メッセージの設定方法

メッセージの本文を設定する方法は2種類あります。

  • メソッドの引数に直接文字列を記述する
  • プロパティファイルに定義した文字列を指定する

ActionSupportにはプロパティファイルから指定した文字列を取得するgetText(プロパティ名)があり、メッセージの本文をプロパティファイルに定義できます。メッセージの文言を別管理にして変更しやすくしています。

なお、読み込むプロパティファイルの指定方法は、struts.xmlにて次の設定を記載します。

struts.xml(抜粋)
<struts>
	<!-- アプリケーション共通プロパティファイル名。拡張子は不要。 -->
	<constant name="struts.custom.i18n.resources" value="commons,message,twitter" />
</struts>
  • プロパティファイルは/WEB-INF/classesに配置
  • プロパティファイルは必ず拡張子が .properties であること
  • 複数のプロパティファイルを指定するにはカンマ区切りで指定

例えばmessage.propertiesに次のメッセージ文字列を登録しておき、

message.properties
register.complete=登録が完了しました。

Actionクラスからこのメッセージを出すには、

MessageAction.java
public class MessageAction extends ActionSupport {
    public String start() throws Exception {
         // 通常メッセージを定義
         addActionMessage(getText("register.complete"));
         // SUCCESSの画面へフォワード
         return SUCCESS;
    }
}

のように、2つのメソッドを組み合わせます。

動的メッセージ、プレースホルダーの利用

メッセージの種類を問わず、プレースホルダーを使った動的メッセージも設定できます。

例えば同様にmessage.propertiesに以下のように定義しておき、

message.properties
register.complete={0}さん、タスク番号{1}の登録が完了しました。

{0}や{1}にはActionクラスから値を渡しておくと…

MessageAction.java
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を作成した中で、項目エラーの追加をする際に利用します。

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?