フォームのencTypeを「multipart/form-data」から「application/x-www-form-urlencoded」に変更すると、この問題が解決することがわかりました。でも奇妙な!マルチパート暗号化で機能しなかった理由がわかりません。
まず第一に、それは暗号化ではなく、エンコーディングです。違いはかなり大きいです。「暗号化」とは、セキュリティキー(暗号化キー、シードなど)がないと予測できない方法で値を変更する方法です。「エンコーディング」とは、データ転送メカニズムで受け入れられるように、および/またはデータを失うことなく反対側で認識/解析できるように値を変更する方法です。値は判読不能になることはなく、多少具体的で異なって配置されているだけです。
具体的な問題に戻ると、エンコーディングは通常、たとえばまたはRichFacesコンポーネントmultipart/formdata
を使用して、フォームと一緒にファイルを送信(アップロード)できる必要がある場合にのみ使用されます。標準形式のエンコーディング。基本的に、リクエストパラメータをこの形式でURLエンコードして送信する必要があることを指定します。<input type="file">
<rich:fileUpload>
application/x-www-form-urlencoded
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
name1=value1&name2=value2&name3=value3
ファイルの内容を渡すのには適していません。そのためには、multipart/form-data
基本的に次のようなエンコーディングを使用する必要があります。
Content-Type: multipart/form-data;boundary=SOME_BOUNDARY
--SOME_BOUNDARY
content-disposition: form-data;name="name1"
content-type: text/plain;charset=UTF-8
value1
--SOME_BOUNDARY
content-disposition: form-data;name="name2"
content-type: text/plain;charset=UTF-8
value2
--SOME_BOUNDARY
content-disposition: form-data;name="name3"
content-type: text/plain;charset=UTF-8
value3
--SOME_BOUNDARY--
この形式では、完全なファイルの内容をリクエストの本文に含めることができます。
JSF 2.0 / 2.1 Webアプリケーションでは、multipart/form-data
要求は通常、カスタムによって処理されますFilter
。RichFaces 3の場合、これは通常、RichFaces4にないによって処理されorg.ajax4jsf.Filter
ます。
application/x-www-form-urlencoded
はすでにHTMLフォームのデフォルトのエンコーディングタイプであることに注意してください。したがって、自分で明示的に指定する必要はありません。enctype
属性を完全に省略してください。
<h:form>
</h:form>
そして、あなたはすべて設定されている必要があります。