执行中具有特定ID的Ajax提交仍然提交整个表单

时间:2017-11-17 11:10:35

标签: ajax jsf-2

据我所知,在<!doctype html> <html ng-app="myApp"> <head> </head> <body> <div ng-controller="TestCtrl as testCtrl"> {{testCtrl.CountdownService.counter}} {{testCtrl.CountdownService.countdown}} </div> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.js"></script> <!-- added for a working snippet --> </body> </html>标记的execute中指定ID应该限制发布到服务器的字段。

f:ajax

在这种情况下,我希望只提交第一个 <h:form> <h:inputText id="one" value="#{manageSettingsBean.testOne}"/> <h:inputText id="two" value="#{manageSettingsBean.testTwo}"/> <h:commandButton value="Multi test" action="#{maintainEntityAction.multi(manageSettingsBean.testOne, manageSettingsBean.testTwo)}"> <f:ajax execute="@this one"/> </h:commandButton> </h:form>

然而,在检查Chrome网络标签中的表单数据时,我看到了

inputText

其中包含两个组件及其默认值(j_idt13=j_idt13&j_idt13%3Aone=One&j_idt13%3Atwo=Two&javax.faces.ViewState=-8624538035389330252%3A2147742525648157763&javax.faces.source=j_idt13%3Aj_idt14&javax.faces.partial.event=click&javax.faces.partial.execute=j_idt13%3Aj_idt14%20j_idt13%3Aone&javax.faces.behavior.event=action&javax.faces.partial.ajax=true"One")。

"Two"

第一个组件在j_idt13:one=One j_idt13:two=Two 中指定,因此它是唯一一个更新的组件,但似乎都提交了这两个字段。我正在将部分提交作为大型表单的一部分,以避免发布过多的数据,但如果整个表单仍在提交中,那么好处似乎会丢失?

1 个答案:

答案 0 :(得分:1)

execute属性与字段的提交无关。它会影响它们在服务器上的处理。所以在这方面你的期望是错误的,一切都按预期行事。

PrimeFaces为此引入了partialSubmit,使用process属性(execute的对应属性)来限制实际提交的内容。

基于此,我为另一个问题<f:ajax render="@none" execute="@this"> and reducing submitted post data size in large form创建了一些代码,使其在普通JSF上工作,同时我提交了feature request to OmniFaces以向OmniFaces添加相同的功能{{ 1}}。他们对它进行了一些改进,并将其添加到即将发布的版本中,您已经可以尝试3.0-SNAPSHOT