jsf jsf-2 primefaces

jsf - enviar formularios múltiples con p: commandbutton



h commandbutton tags (4)

Deseo enviar formularios múltiples con un botón de envío. Tengo formularios múltiples porque cada p: fileUpload necesita una forma propia (cuando está en modo avanzado).

Aquí está el código para mi botón de envío:

<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>

Llama a bean.submit (), pero no procesa los otros formularios. Tal vez mi comprensión del procesamiento es incorrecta, pero pensé que si pongo un formulario en "proceso", entonces será enviado.

¿Alguna idea de cómo hacer que funcione?


Esa es la limitación de HTML. Solo los datos de entrada que contienen dentro del formulario actual (en el que se invoca el comando) se enviarán al lado del servidor. En cuanto al atributo de process , que solo identifica qué parte (s) de los datos enviados deben ser procesados ​​por JSF después de que hayan llegado.

¿Alguna idea de cómo hacer que funcione?

Pon todos los datos relacionados en la misma forma. Use, si es necesario, solo una <p:fileUpload> con soporte para múltiples archivos.


Como BalusC señaló correctamente, solo puede enviar un formulario en una sola solicitud. Sin embargo, puede invocar múltiples solicitudes con un solo clic:

<p:commandButton value="Save" widgetVar="saveButtonBottom" action="#{bean.submit}" ajax="false" onstart="form1submitbutton.getJQ().click();form2submitbutton.getJQ().click()" process="@form" />

Debe tener en cuenta que esto dará lugar a que el servidor procese varias solicitudes simultáneas, y no hay garantías de que se solicite una orden de procesamiento. Esto puede dificultar la validación y el procesamiento de datos de fondo. Podrías tratar de evitar esto usando un controlador completo y enviando los envíos de formularios en secuencia de esta manera, pero aún así esto significa que los datos de tus formularios serán enviados al servidor uno por uno.

Además, el enfoque anterior solo funcionará si sus formularios se envían a través de ajax.


Coloque esto dentro de form2:

<p:remoteCommand name="sendAjaxicalPGfilter" update="form2:minMaxTable" action="#{OptimizationSettingsBean.handleProductGroupChange}" />

llama esto al botón de comando form1

<p:commandButton value="Done" oncomplete="selectedSettingDlg.hide();" onstart="sendAjaxicalPGfilter();" ajax="true" action="#{CreateSourcingPlanBean.dummy}" update=":form1:assignmentList" > </p:commandButton>


en tus

<p:commandButton value="Save" widgetVar="saveButtonBottom" action="#{bean.submit}" ajax="false" process=":form1,:form2,@this" />

agregue el atributo: partialSubmit="true" y chance ajax="false" a ajax="true"

<p:commandButton partialSubmit="true" value="Save" widgetVar="saveButtonBottom" action="#{bean.submit}" ajax="true" process=":form1,:form2,@this" />