2013-01-23 52 views
0

有2种形式,只需要1提交按钮:2形式不同的编码类型 - 一个提交按钮

<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

问题是什么? – SJuan76

+2

为什么不把所有的一个表格?您可以使用'multipart'编码在表单中添加字段。 – SJuan76

+0

这可能是一个选项,它会是最好的选择吗? – jacktrades

回答

0

将所有字段放在一个表单中。它不会破坏任何东西,并有两种形式是不好的,因为:

1)浏览器期望在提交表单后,它将接收用于加载新页面的数据(在当前框架中或在另一个框架中) 。让他在第一个表格之后发送第二个表格可能会导致错误。

2)JSF希望POST意味着新的页面/视图已准备就绪。来自同一页面的POST后可能会被忽略。

3)1 & 2如果您使用AJAX,则不成立。也就是说,如果你想同时发送两个表单,那么使用AJAX就没有意义。而且,如果你仍然这样做,你将在请求中上传一个文件,并在另一个文件中上传一个表单,并且不得不以某种方式在服务器中匹配一个文件。

4)放在一起经过充分测试,尝试和理解。有数千页解释如何配置过滤器,访问数据等。

+1

至少写一个所有的样本。 –