Struts 2 でクラスを拡張する場合、ValidatorSupport
クラスにインスタンス変数を設定できますか? ステートを持つことができますか、それともステートレスである必要がありますか?
アクションクラスがシングルトンではなく、状態を持つことができることは知っていますが、関連するバリデータについてはわかりません。
を拡張するバリデーター内にインスタンス変数を持つことができるかどうかを知る必要がありますValidatorSupport
。例えば:
public class SomeValidator extends ValidatorSupport {
private boolean alreadyHasErrorOnPage;
}
バリデーターがサインルストンの場合は、競合状態が発生し、要求/応答ごとに一貫したデフォルト状態にならないため、 alreadyHasErrorOnPage を使用します。それらがシングルトンではなく、要求/応答ごとに新しい SomeValidator インスタンスが作成される場合は、 alreadyHasErrorOnPage を使用しても安全です。
私が現在取り組んでいるプロジェクトに具体的にどの程度関連しているかはわからないので、以下のことは一粒の塩で考えてください。
バリデーターは私たちのプロジェクトではシングルです。アプリケーションにアクセスしてデバッグしたところ、2 回目の要求/応答の後、インスタンス メンバーがデフォルトの状態になっていないことがわかりました。基本的に、それらは最初または前のリクエスト/レスポンスから値を引き継いでいます。
まだ確信が持てない理由は、私たちのプロジェクトが ValidatorSupportport をラップし、バリデーターが実装するインターフェースを公開しているように見えるからです。私たちのコードベース内には、バリデーターのインスタンスをマップに格納して本質的にシングルトンにするコードがあるようです。ストック ストラット 2 が同じように動作するかどうかは判断できませんでした。