使用p:commandbutton提交多个表单

时间:2012-03-16 14:14:37

标签: jsf jsf-2 primefaces

我想通过一个提交按钮提交多个表单。我有多种形式,因为每个p:fileUpload都需要一个自己的表单(当处于高级模式时)。

以下是我的提交按钮的代码:

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

它调用bean.submit(),但它不处理其他形式。也许我对处理的理解是错误的,但我想如果我把表单放入“流程”,那么它就会被提交。

知道如何让它发挥作用吗?

4 个答案:

答案 0 :(得分:5)

这是HTML的限制。只有当前表格中包含的输入数据(其中命令被调用)才会被发送到服务器端。对于process属性,仅识别 提交数据的哪个部分必须在JSF到达后由JSF处理。

  

知道如何让它发挥作用吗?

将所有相关数据放在同一表格中。如有必要,只需使用一个具有多个文件选择支持的<p:fileUpload>

答案 1 :(得分:5)

将其放在form2中:

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

在form1命令按钮

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

答案 2 :(得分:4)

中的

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

将属性partialSubmit="true"和偶然ajax="false"添加到ajax="true"

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

答案 3 :(得分:3)

正如BalusC正确指出的那样,您只能在一个请求中提交一个表单。但是,您只需单击一下按钮即可调用多个请求:

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

您必须意识到这将导致服务器处理多个同时请求,并且无法保证请求处理顺序。这可能使验证和后端数据处理变得棘手。您可以尝试通过这种方式依次使用oncomplete处理程序和fire form提交来解决这个问题,但这仍然意味着您的表单数据将逐个发送到服务器。

此外,只有通过ajax提交表单时,上述方法才有效。