私はまだ JSF 2 の複合コンポーネントの機能のいくつかを使用する方法を学んでいます。私は JSF 1.2 開発の経験があり、最近 Geary と Horstmann による本「Core Java Server Faces 3rd Edition」を読みました。
私がやろうとしているのは、ファイル アップロード コンポーネントをラップする複合コンポーネントを作成することです (現在は PrimeFaces を使用しています<p:fileUpload>
)。アップロードされたファイルを、セッション スコープのマネージド Bean の文字列ベースのキーに関連付ける必要があります (後で使用します)。「uploadedFileKey」という名前の複合コンポーネント インターフェイスの属性を介してキーを提供しようとしています。インターフェースは次のとおりです。
<html xmlns:composite="http://java.sun.com/jsf/composite">
<composite:interface>
<composite:attribute name="uploadedFileKey"
type="java.lang.String"
required="true" />
</composite:interface>
...
</html>
実装は簡単で、前述のように PrimeFaces の fileUpload タグを使用します。これには、PrimeFaces ショーケース Web アプリケーションのサンプル コードに基づいて作成したイベント ハンドラーを持つマネージド Bean が必要です。これが私の実装です:
<composite:implementation>
<p:fileUpload
fileUploadListener="#{primeFacesFileUploadController.handler}"
label="Browse"
mode="advanced"
allowTypes="png,gif,jpg" />
</composite:implementation>
ここにコントローラ Bean 全体を含めるつもりはありませんが、クラス宣言は次のとおりです。
@ManagedBean(name="primeFacesFileUploadController")
@RequestScoped
public class PrimeFacesFileUploadController {
// ...
}
PrimeFaces ファイルのアップロードは、私が見た他のものと同じです。Faces サーブレットのカスタムFilter
を使用して、アップロード データにアクセスします。実際のファイル アップロード部分は正常に動作し、アップロードが成功すると、アップロードされたファイルが Tomcat サーバーの一時ファイルに保存されます。
私の問題は、アップロードが成功した後に複合コンポーネントにアクションを実行させる方法がわからないことです。複合コンポーネントに、マップ値としてアップロードされた特定のセッション スコープのマネージド Bean にを格納するようuploadedFileKey
にします。どうやってやるの?Map
File