1

状況は次のとおりです。

  1. フォームのある JSP ページがあります。
  2. このフォームには<select>、DB からロードされたオプションを含むさまざまなタグが含まれています。
  3. XML ファイルでバリデーションを使用したいと考えています。

問題は次のとおりです。XML ファイルを使用し、フォーム フィールドにエラーがある場合、Struts フレームワークは、レイアウトしたクラス メソッドを通過せず、input結果を直接返します。それで、ポイントは何ですか?このようにして、<select>上で述べたさまざまなタグのオプションをロードできません。

だから私はこのようなことを考えました:

<result name="input" type="chain">
  <param name="actionName">Class_method</param>
</result>

しかし、このトリックを使用すると、すべてのエラー メッセージが失われます。つまり、hasFieldErrors()常に false が返されます。

どうすれば解決できますか?

4

2 に答える 2

1

多くの質問がありますが、すべて良いです。

  1. 変換エラーと検証エラーにより、インターセプターは結果WorkflowをトリガーしINPUT、ワークフローはまたはその他のもの)に到達する代わりINPUTに結果execute()

  2. 結果の場合にも利用可能でなければならないselectboxesソースなどの静的データを入力する必要がある場合はINPUT、その読み込みをprepare()メソッドに入れ、アクションにインターフェースを実装させる必要がありPreparableます。このメソッドは、公式ドキュメントで説明されているように、INPUT 結果が返される前に Interceptor によって実行されます。

  3. 結果の使用は避けてくださいchain。何年も前から公式に推奨されていません。

  4. (ページが送信されて結果がレンダリングされた後に F5 キーを押すことによって) 二重送信を防止する場合は、結果でPRG パターンを使用できますredirectAction。ただし、この方法では、同じ結果の問題が発生しchainます。メッセージ (およびパラメーター) が失われます。

  5. リダイレクト全体でエラー メッセージ、アクション エラー、フィールド エラーを保持するには、Interceptor と呼ばれる定義済みのインターセプターを使用できます。これは、スタックに含まれていないMessage Storeため、スタックに含める必要があります。この回答でその仕組みdefaultStackを説明しました。

  6. PRG と一緒にメッセージ ストアを使用することにした場合、ここに書くには長すぎるため、さらに考慮事項がありますがField Error -> INPUT -> PRG -> Retrieve Field Error -> INPUT -> etc...、10 回目の再帰の近くでブラウザーによってブロックされるため、無限再帰を防ぐことについては、将来説明される可能性があります。 ..しかし、それは別の話です。

于 2016-06-15T10:14:50.013 に答える