有2个表单,只需要1个提交按钮:
<h:form>
<h:panelGrid columns="2">
<h:outputText value="#{msgs.shortDescription}"/>
<p:inputText value="#{fileBean.shortDescription}" required="true"/>
<h:outputText value="#{msgs.longDescription}"/>
<p:inputTextarea value="#{fileBean.longDescription}" required="true"/>
<h:selectOneMenu value="#{enumRegistration.selectedRegion}">
<f:selectItems value="#{enumRegistration.regionList}"/>
<f:ajax listener="#{enumRegistration.selectCity}" render="citiesmenu"/>
</h:selectOneMenu>
<h:commandButton value="Submit" action="#{fileBean.updateAd}"/>
</h:panelGrid>
</h:form>
<h:form enctype="multipart/form-data">
<p:fileUpload value="#{fileBean.file}" mode="advanced"
fileUploadListener="#{fileBean.handleFileUpload}"
required="true" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
requiredMessage="You must upload a file"/>
<p:commandButton value="Submit" ajax="false"/>
</h:form>
如何只有1个提交按钮?
一种选择是将两者都包含在一个表单中......是否真的是在常规表单上拥有 multipart / form-data 的最佳选择?
答案 0 :(得分:0)
将所有字段放在一个表单中。它不会破坏任何东西,并且有两种形式是不好的,因为:
1)浏览器希望在提交表单后,它将接收用于加载新页面的数据(在当前帧或另一帧中)。让他在第一个表格之后发送第二个表格可能会导致错误。
2)JSF希望POST意味着新页面/视图已准备就绪。来自同一页面的POST可能会被忽略。
3)1&amp;如果您使用AJAX,则不是2。也就是说,如果你想同时发送两个表单,那么使用AJAX就没有意义了。而且,如果您仍然这样做,您将在请求中上传一个文件,在另一个中上传一个表单,您将不得不以某种方式在服务器中匹配一个。
4)将所有这些放在一起经过充分测试,尝试和理解。有数千页解释了如何配置过滤器,访问数据等。