<h:form>
の 1 つがmultipart/form-data
(つまり、Richfaces4 の を介してファイルを送信するために使用される)である 2 つのフォームのテンプレートを送信する際に問題が発生していますrich:fileUpload
。
基本的なテンプレートは次のようになります。
<h:form enctype="multipart/form-data">
<rich:fileUpload fileUploadListener="#{uploader.doUpload}" execute="@form" render="@form :inputForm" />
</h:form>
<h:form id="inputForm">
<h:inputText value="#{uploader.input1}" />
<h:commandButton action="#{uploader.save}" value="Save" />
</h:form>
このテンプレートには、アクションを呼び出す page.xml もあります。
<action execute="#{uploader.selectObjectsFromRequest}" on-postback="false" />
私の問題はselectObjectsFromRequest
、「保存」ボタンをクリックすると呼び出され続けることです。
これをデバッグするFacesContext.getCurrentInstance().isPostback()
と、この場合は false が返され、十分に true が返されます。フォームは なしで送信されjavax.faces.ViewState
ます。
ViewState が失われるのは JSF のバグであり、フォームを明示的に再レンダリングして状態を復元する必要があることは承知しています。しかし、これは私がすでにやっていることです。
では、これは Richfaces のバグですか?
追加するように編集:ここに BalusC によって投稿された回避策の JavaScript スニペットを追加すると、ViewState が復元され、フォームが正しく送信されます。この場合、明示的な再レンダリングが十分でない理由を誰かが明らかにできるでしょうか?