6

1 つの文字列と 1 つのファイルの 2 つの入力を持つフォームがあります。

<form:form ...>
  <form:input type="text" ....>
  <form:input type="file" ....>
</form:form>

文字列入力の検証が失敗した場合、コントローラーはこの同じビューに戻ります。その場合、文字列フィールドは保持されますが、選択したファイルは失われます。

ビューが再レンダリングされるときに選択されたファイルを保持する方法はありますか?

答えはノーだと思います。それは、サーバー側のフレームワークではなく、HTML ファイルの入力に固有のものです。足りないものがあれば質問します。

4

1 に答える 1

6

ファイルの入力値を保存できないのは事実です。これは、すべてのブラウザーに実装されているのと同じです。私が知る限り、それは潜在的なセキュリティ リスクに関係していますが、それ以上深く掘り下げることはありませんでした。

ただし、同様のことを達成する可能性があります。これが私たちのプロジェクトで行ったことです:

  • fileupload を含む各フォームには、入力が無効である限り変更されない UUID があります。
  • FineUploader を使用して、これらの編集フェーズ中にファイルを非同期的にアップロードし、この uuid をフォルダー名としてフォルダーにアップロードします
  • 現在のアップロードへの参照を使用して非表示の入力 (テキスト) を維持します
  • bindingresult エラーがない場合は、メソッドでファイルを処理し、完了したらアップロード フォルダーを削除します。
  • エラーが発生した場合は、uuid を所定の位置に保持し、入力フィールドを維持して、参照が失われないようにします。

これは現在安定して動作し、良い副作用として、これらのフォームにマルチパートが不要になり、別のコントローラーがアップロードを処理するだけなので、コントローラーは何とか簡単になり、私の目にはよりきれいに書くことができました。

編集: - cronjob を実装して、放棄されたアップロードをクリアすることをお勧めします!

于 2013-03-20T06:06:28.057 に答える