私はアプリケーションでファイルをアップロードするのに<t:inputFileUpload>
を使用します。選択されたファイル(UploadedFile
オブジェクトとして表される)は、フォーム提出時にそのバインディング(バッキングBeanのメンバー)にのみ保存されます。 UIで動的要素を使用すると、フォームは送信せずに再レンダリングされます。この場合、値バインディングは無効であり、ユーザーは<t:inputFileUpload>
を使用してファイルを再選択する必要があります。UIComponentのアクセスバリューバインディング
もちろん、これはあまりユーザーフレンドリーではありません。提出しなくても、<t:inputFileUpload>
はValueChangedEvent
をスローし、新しい値(アップロードされたファイル)を値バインディング(つまりバッキングBeanのメンバー)にコピーするイベントハンドラを登録したいとします。
<ui:repeat value="#{bean.myFiles}" var="file">
<t:inputFileUpload
value = "#{file}"
storage = "file" />
</ui:repeat>
今、私はこのような何かをしたいと思います:
UploadedFile[] myFiles;
public void valueChangedHandler(ValueChangedEvent ev) {
UploadedFile file = (UploadedFile)ev.getNewValue();
UIComponent comp = ev.getComponent();
// This line is pseudocode - getValueBinding() is not available
UploadedFile bindingFile = (UploadedFile)comp.getValueBinding();
// Assigning the new value to the binding
bindingFile = file;
}
私は複数のファイルをアップロードすることができるようにしたいと、私はこのようなJSFで参照値として
UploadedFile
オブジェクトの配列結合を、持っています
これは可能なのですか?私は、私が望むようにそれが起こるようにValueBinding getValueBinding(String)
を呼び出す方法をまだ理解していません。
これは不可能なので、提出することなく ' 'コンポーネントの内容を保持する方法はありますか?動的再レンダリングは、アップロードコンポーネントを囲む ''コンポーネントに影響します。 –
答えを読んで理解しましたか? – BalusC
もう一度読む私は最終的に保存が不可能でも(なぜなら、本質的にフォームを提出するユーザーがいなくてもファイル入力コンポーネントをあらかじめ充填しているので)理解しています。あなたの答えをありがとう。それがうまくいかないことを知るだけでなく、理由を知ることも良いことです。 –