0

ヘッダーと詳細の関係にある子のコレクションを持つモデル オブジェクトがあり、ヘッダーは 1 つのアクション クラス (およびフォーム) で処理され、詳細は別のアクション クラス (およびフォーム) で編集されます。ヘッダー オブジェクトを保存するときに、ヘッダーからオブジェクトのグラフ全体を完全に検証できるようにしたいと考えています。ヘッダーの-validation.xml: 内で既にビジターを宣言しています (このプロジェクトでは XML 検証を使用しています)。

<field name="details">
    <field-validator type="visitor" />
</field>

詳細クラスにも適切な検証があります。

この特定のオブジェクト グラフを別のグラフから作成/事前設定することもあります。ただし、事前入力では、必須フィールドなどの一部が空のままになります。

何が起こるかというと、save メソッドの実行時に送信されるフォームであるため、ヘッダーのみが検証されます。実際には、詳細のヘッダー フォームにフォーム要素が含まれていない場合でも、(宣言したビジターを介して) 詳細の検証を強制することは可能ですか?

DRY に保ちたいので、ヘッダー アクションの validate() メソッド内で明示的な検証を行う必要はありません。

4

1 に答える 1

0

問題の一部は、検証が実行されると、struts はフォームから作成されたオブジェクトしか認識しないことです。詳細のリストが何らかの方法でフォーム内で参照されていない場合、xml 検証ではその情報を参照して検証することができません。

考えられる解決策の 1 つは、隠しフィールドを介してフォームに詳細情報を含めることです。リストを反復処理して、詳細オブジェクトごとに非表示フィールドを追加できます。詳細オブジェクトの各データ メンバーに非表示フィールドが必要でない限り、おそらく何らかのカスタム データ コンバーターが必要になるでしょう。

それ以外に、xml 検証だけでそれを行う方法はありません。

于 2011-01-14T20:06:56.657 に答える