我想通过一个提交按钮提交多个表单。我有多种形式,因为每个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(),但它不处理其他形式。也许我对处理的理解是错误的,但我想如果我把表单放入“流程”,那么它就会被提交。
知道如何让它发挥作用吗?
答案 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提交表单时,上述方法才有效。