Ajax 在执行中使用特定 ID 提交仍然会提交整个表单
Ajax submit with specific IDs in execute still submits entire form
据我了解,在 f:ajax
标记的 execute
中指定 ID 应该限制发布到服务器的字段。
<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>
在这种情况下,我预计只会提交第一个 inputText
。
但是,在检查 Chrome 的“网络”选项卡中的表单数据时,我看到了
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
第一个组件在 javax.faces.partial.execute
中指定,因此它是唯一更新的组件,但两个字段似乎都已提交。我将部分提交作为大型表单的一部分进行,以避免发布过多数据,但如果仍在提交整个表单,好处似乎会丢失?
execute
属性与是否提交字段无关。它会影响它们在服务器上的处理。所以在这方面你的期望是错误的,一切都按预期运行。
PrimeFaces 为此引入了 partialSubmit
,它使用 process
属性(execute
的对应属性)来限制实际提交的内容。
基于此我为另一个问题创建了一些代码 that makes this work on plain JSF as well and at the same time I submitted a feature request to OmniFaces to add the same functionality to the OmniFaces o:form
. They improved it a little and added it to the upcoming release which you can already try as a 3.0-SNAPSHOT
据我了解,在 f:ajax
标记的 execute
中指定 ID 应该限制发布到服务器的字段。
<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>
在这种情况下,我预计只会提交第一个 inputText
。
但是,在检查 Chrome 的“网络”选项卡中的表单数据时,我看到了
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
第一个组件在 javax.faces.partial.execute
中指定,因此它是唯一更新的组件,但两个字段似乎都已提交。我将部分提交作为大型表单的一部分进行,以避免发布过多数据,但如果仍在提交整个表单,好处似乎会丢失?
execute
属性与是否提交字段无关。它会影响它们在服务器上的处理。所以在这方面你的期望是错误的,一切都按预期运行。
PrimeFaces 为此引入了 partialSubmit
,它使用 process
属性(execute
的对应属性)来限制实际提交的内容。
基于此我为另一个问题创建了一些代码o:form
. They improved it a little and added it to the upcoming release which you can already try as a 3.0-SNAPSHOT