0
0

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.

Struts2の自動型変換(アノテーション登録編)

Posted at

Struts2の自動型変換機能

Struts2では、Actionクラスのフィールドにリクエストパラメータが格納されます。このとき、フィールドの型をString以外にすると、Struts2は自動的にその型へ変換を試みます。

Struts2標準で自動型変換を行える型

以下の型は、特に設定は不要です。

型の分類 よく使う型
プリミティブ int,long
数値 Integer,BigDecimal
配列 String[]
コレクション List,Map

これらの自動型変換は、Actionクラスのフィールドと、Actionクラスからネストしたフィールドに対しても有効です。

標準以外で型変換を行うには

次の方法があります。

  1. xwork-conversion.properties に 自動型変換するクラスを宣言する
  2. Actionクラスごとのpropertiesファイルまたはアノテーションで、フィールド別に型変換クラスを宣言する

前者の方法は Struts2の自動型変換(2014 summer version) にて紹介しています。
今回は後者で、アノーテションを使った記載方法です。

アノテーションで定義する

アノテーションで定義する方法は、Actionクラスに定義するか、またはActionクラスのフィールドからネストしたクラスにて定義します。

例えば、Actionクラスにパラメータを格納するフィールドを用意した場合は、次のようになります。

SampleVO.java
@Conversion(
	conversions = {
		@TypeConversion(converter="lumi.converter.BigDecimalConverter" , key="age" )
	}
)
@Data
public class SampleVO implements Serializable {
	private String username;
	private BigDecimal age;
}

@TypeConversionがもつ属性は、次の2つを指定します。

属性名 内容
converter 型変換の実装クラス名
key フィールド名

型変換が失敗した場合

フィールドの型変換が失敗した場合、Struts2は項目エラー(FieldError)として扱います。つまりValidationの1つですので、Validation定義をしておくと型変換に失敗しても、入力値を復元して表示できます

先ほどの例に、Validationの記述を追加します。

SampleVO.java
@Conversion(
	conversions = {
		@TypeConversion(converter="lumi.converter.BigDecimalConverter" , key="age" )
	}
)
@Validations(
	conversionErrorFields = {
		@ConversionErrorFieldValidator(fieldName="age" , key="age.type.mismatch" , repopulateField=true)
	}
)
@Data
public class SampleVO implements Serializable {
	private String username;
	private BigDecimal age;
}

@ConversionErrorFieldValidatorの属性に型変換のパラメータ、メッセージならびに repopulateField=trueを記載することで、元のパラメータを再描画します。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?