Reputation: 556
I want to submit multiple forms with one submit button. I have multiple forms because each p:fileUpload needs an own form (when in advanced mode).
Here's the code for my submit button:
<h:form id="form1">...</h:form>
<h:form id="form2">...</h:form>
<h:form>
<p:commandButton value="Save" widgetVar="saveButtonBottom"
action="#{bean.submit}" ajax="false"
process=":form1,:form2,@this" />
</h:form>
It does call bean.submit(), but it does not process the other forms. Maybe my understanding of processing is wrong, but I thought if I put a form into "process", then it will be submitted.
Any idea how to make it work?
Upvotes: 8
Views: 17988
Reputation: 329
in your
<p:commandButton value="Save" widgetVar="saveButtonBottom"
action="#{bean.submit}" ajax="false"
process=":form1,:form2,@this" />
add the attribute: partialSubmit="true"
and chance ajax="false"
to ajax="true"
<p:commandButton partialSubmit="true" value="Save" widgetVar="saveButtonBottom"
action="#{bean.submit}" ajax="true"
process=":form1,:form2,@this" />
Upvotes: 4
Reputation: 51
Place this inside form2:
<p:remoteCommand name="sendAjaxicalPGfilter"
update="form2:minMaxTable"
action="#{OptimizationSettingsBean.handleProductGroupChange}" />
call this on form1 command button
<p:commandButton value="Done"
oncomplete="selectedSettingDlg.hide();" onstart="sendAjaxicalPGfilter();"
ajax="true" action="#{CreateSourcingPlanBean.dummy}"
update=":form1:assignmentList" >
</p:commandButton>
Upvotes: 5
Reputation: 2165
As BalusC correctly pointed out you can only submit one form in one request. However, you can invoke multiple requests with one button click:
<p:commandButton value="Save" widgetVar="saveButtonBottom"
action="#{bean.submit}" ajax="false" onstart="form1submitbutton.getJQ().click();form2submitbutton.getJQ().click()"
process="@form" />
You have to realize this will result in multiple simultaneous requests being processed by your server, and there are no guarantees as to request processing order. This can make validation and backend data processing tricky. You could try to work around that by using oncomplete handler and fire form submissions in sequence this way, but still this means your forms data will be sent to the server one-by-one.
Also, the above approach will only work if your forms are submitted via ajax.
Upvotes: 3
Reputation: 1108632
That's the limitation of HTML. Only the input data containing within the current form (wherein the command is been invoked) will be sent to the server side. As to the process
attribute, that only identifies which part(s) of that submitted data must be processed by JSF after they have arrived.
Any idea how to make it work?
Put all related data in the same form. Use if necessary just a single <p:fileUpload>
with multiple file selection support.
Upvotes: 7