【发布时间】:2013-03-31 21:53:00
【问题描述】:
我在提交包含两个表单的模板时遇到问题,其中<h:form>s 之一是multipart/form-data(即,用于通过Richfaces4 的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 并且足够真实,表单提交时没有 javax.faces.ViewState。
我知道丢失 ViewState 是一个 JSF 错误,我们应该明确地重新渲染表单以恢复它们的状态。但这就是我已经在做的事情。
那么,这是 Richfaces 中的错误吗?
编辑添加: 添加由 BalusC here 发布的解决方法 javascript sn-p 可恢复 ViewState 并使表单正确提交。所以也许有人可以解释为什么在这种情况下显式重新渲染是不够的?
【问题讨论】:
标签: file-upload jsf-2 richfaces