3

次の要件があります。ユーザーがさまざまな入力フィールドとドロップダウンで構成されるフォームにデータを入力する必要があるページがあります。特別なのは、このフォーム内にファイルアップロードの一部があることです。ユーザーは、いくつかの (複数の) ファイルをアップロードできる必要があります。次に、ページの最後で送信を押すと、入力全体が送信され、オブジェクトに書き込まれます。このオブジェクトには、アップロードされたファイルへのパスも保存する必要があります。Primefaces の (3.4) コンポーネントを使用してファイルのアップロードを実現したいと考えています。

ここで私の課題: fileUpload には enctype "multipart/form-data" を持つ独自の h:form が必要です。他のデータは「通常」の範囲内です。私にとってこれは、ページ内でフォームを次々に配置する必要があることを意味します。ただし、fileUpload コンポーネントは他のフォームの中央に表示する必要があります。

どうすればこれを達成できますか?何か案は?

よろしく、フロリアン

4

1 に答える 1

4

ここで私の課題: fileUpload には enctype "multipart/form-data" を持つ独自の h:form が必要です。他のデータは「通常」の範囲内です。私にとってこれは、ページ内でフォームを次々に配置する必要があることを意味します。

これは正直言って意味がありません。どうやってこの結論に達したのかわかりません。おそらく、問題の誤った観察に基づいてこれを結論付けました。おそらく、間違った Bean スコープを使用し、フォーム送信の処理中に、これまでに入力されたすべての入力ファイルと以前にアップロードされたファイルに対して null 値が発生した可能性があります。@ViewScoped複数の ajax リクエストによって同じビューと対話している限り、まったく同じ Bean インスタンスを存続させたい場合は、使用する必要があります。

エンコーディング<h:inputText>とまったく同じ形式のように、「通常の」入力フィールドを完全に配置できます。multipart/form-dataこのエンコーディングを使用すると、HTTP 要求が少し異なる形式で送信され、バイナリ コンテンツの余地が生まれます。詳細な背景説明については、rich:popupPanel および t:dataList の下の h:commandLink のバッキング Bean に渡されない paramsも参照してください。

以下も参照してください。


具体的な問題とは関係なく、どう解釈していいのかわからない

このオブジェクトでは、アップロードされたファイルへのパスも保存する必要があります

ただし、クライアント側の完全なファイル パスがサーバーに送信されることに絶対に依存できないことに注意してください。これは、ブラウザのセキュリティ バグにより IE ブラウザが使用されている場合にのみ発生します。またはのフレーバーでファイルの内容に興味があるはずです。必要に応じて、唯一のファイル名に基づいて、一意の名前の (一時) ファイルを自分で自動生成する必要があります (偶然に同じファイル名を持つ 2 番目にアップロードされたファイルがそれを上書きしないようにしてください)。Firefox 3 で HTML 入力フォームからファイル パスを取得する方法も参照してください。InputStreambyte[]

于 2012-11-20T13:26:16.103 に答える