私はstruts 1.1上に構築されたアプリケーションの機能強化を行っています.そこで私が使用するファイルアップロードフィールドが必要です.
<html:file size="40" property="strUploadNoFile" />
次に、以下のように DynaValidatorForm を使用する struts 構成ファイル フォーム Bean にプロパティを追加します。
<form-property name="strUploadNoFile" type="org.apache.struts.upload.FormFile"/>
また、フォーム暗号化タイプを jsp の multipart/form-data として追加します。
コードは正常に動作し、アップロードされたファイルの内容を正常に読み取ることができます。
しかし、ここでのアプリケーション設計は、いくつかのアクションが同じフォーム Bean にマップされるというものでした。したがって、ファイルアップロードフィールドが存在しないリクエストパスから来ると、例外が発生します。
タイプ「java.lang.String」の値をタイプ「org.apache.struts.upload.FormFile」のプロパティ「strUploadNoFile」に割り当てることはできません
その理由は、encript をデフォルトの application/x-www-form-urlencoded または multipart/form-data のいずれかに条件付きで切り替えるためです。したがって、ファイルのアップロードが存在しないパスから来た場合、暗号化タイプは application/x-www-form-urlencoded になります。しかし、上で述べたように、アプリケーション構造はさまざまなアクションに共通のフォーム Bean を使用しますが、FormFile である Bean プロパティ strUploadNoFile はフォーム プロパティに残りますが、jsp の暗号化タイプは multipart/form-data です。これが例外の原因だと思います。
そのxmlファイルにハードコードされているプロパティから動的に追加できるかどうかを知る必要がありますか? ファイルアップロードフィールドを持つリクエストパスからのみ FileForm プロパティを追加できるようにします。この場合、個別のフォーム Bean を持つリクエストごとにアプリケーション アーキテクチャを再設計するのは大変な作業です。