2

相互に依存するフォームを持つ struts2 プロジェクトに取り組んでいます。私は struts2-conversation を見つけ、その単純な例をステップ実行して、 ここまでの会話メカニズムを理解しました (何か間違っている場合は訂正してください)。

  • コントローラーは struts.xml でマップされます
  • シリアライズ可能な ConversationContext と Storage-Service を保持します
  • ConversationContext は、命名規則によってフォームにマップされた POJO を保持します

今私の質問は、検証をどこに置くべきですか?

この構造では、コントローラーは ConversationSupport を拡張する 1 つのみであり、それによって、validate、prepare、および addField- & ActionError メソッドを提供する ActionSupport です。しかし、コントローラー内で検証することは、コンテキスト全体を検証することを意味し、実際には問題を解決しません。

上記のコンテキスト内で POJO 内のアノテーションを使用して検証を試みましたが、コンテキストがフラッシュされていないかのように NullPointerException が発生し、struts2 の xml 検証アプローチが硬すぎると思います。(ところで、生成されたJavaScriptを提供する前に縮小する方法は?そして、なぜそんなに多くのオプションがあるのですか?)

Mark の会話インターセプター アプローチでも同様の問題が発生しましたが、これは実際には得られなかった回避策です。多分あなたはそこで私を助けることができます。

4

1 に答える 1

1

モデル クラスでアノテーションを使用する場合は、プラグインで問題なく動作します (他の検証アプローチと同様)。

モデルを検証するには、コントローラーのメソッドに追加@VisitorFieldValidatorします。サンプル アプリでは、 メソッドとメソッドgetModel()にも追加@VisitorFieldValidatorします。次に、検証するフィールドで検証注釈を使用できます。getContact()getPreferences()

この例のサービスは、Struts2 コントローラーで挿入されたサービスを使用する簡単な例と、それを会話フレームワークと簡単に統合する方法を示しているだけですが、直接関連したり、必要とされたりするわけではありません (また、Spring、Guice のいずれかを使用することをお勧めします)。 、または現実世界での依存性注入の CDI)。

ConversationContext クラスは、主にフレームワークによる内部使用を目的としています。注釈と規則を使用して、それとの対話を避けることができるはずです。あなたが単に冒険的になりたいのでない限り。

サンプル アプリで XML 検証を使用するには、パッケージ名を変更して「struts2」という単語を削除し、Struts2 リソース ロード ツールが XML をロードできるようにする必要があります。

于 2012-09-17T01:08:25.507 に答える