0

フォームが 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つだけにする方法は?

1つのオプションは、両方を1つのフォーム内に囲むことです...通常のフォームにもマルチパート/フォームデータを含めるのが本当に最善のオプションですか?

4

1 に答える 1

0

すべてのフィールドを 1 つのフォームにまとめます。何も壊すことはなく、次の理由により、2 つのフォームを持つことは良くありません。

1) ブラウザは、フォームを送信した後、新しいページ (現在のフレームまたは別のフレーム) をロードするためのデータを受け取ることを期待しています。最初のフォームの後に 2 番目のフォームを送信させると、エラーが発生する可能性があります。

2) JSF は、POST が新しいページ/ビューの準備が整ったことを意味すると想定します。同じページからの次の POST は無視される可能性があります。

3) AJAX を使用する場合、1 と 2 は正しくありません。とはいえ、両方のフォームを同時に送信したい場合は、AJAX を使用しても意味がありません。それでもそうする場合は、リクエストでアップロードされたファイルと他のフォームでアップロードされたフォームがあり、サーバーでいずれかを一致させる必要があります。

4) すべてをまとめることは、十分にテストされ、試行され、理解されています。フィルターの設定方法、データへのアクセス方法などを説明するページが何千もあります。

于 2013-01-23T13:45:35.650 に答える