我有一个特殊的问题:我需要通过客户端 onchange 事件向服务器发送一个值而不提交整个表单。有什么功能可以做到吗?
我可以通过 Javascript 处理组件:
<h:inputText onchange= ...js... >
我可以通过 ajax 发送一个值:
<f:ajax execute="name"/>
如何组合起来?
解决了,但我还有一个问题:
什么处理得更快——事件的 Ajax 处理或 JavaScript 处理?
我有一个特殊的问题:我需要通过客户端 onchange 事件向服务器发送一个值而不提交整个表单。有什么功能可以做到吗?
我可以通过 Javascript 处理组件:
<h:inputText onchange= ...js... >
我可以通过 ajax 发送一个值:
<f:ajax execute="name"/>
如何组合起来?
解决了,但我还有一个问题:
什么处理得更快——事件的 Ajax 处理或 JavaScript 处理?
很简单,AJAX 是为页面上发生的部分提交/更新而设计的。您只需要指定标签event
的属性<f:ajax>
并随心所欲地让它成为change
。根据部分表单提交,在标签的execute
属性中指定要在服务器上更新的组件的 ID。execute
但由于of的默认值<f:ajax>
恰好是@this
(触发事件的组件),您可以完全省略它。像这样:
<h:inputText id="text" value="#{bean.text}">
<f:ajax event="change"/>
</h:inputText>
这样,在 JavaScript 更改事件发生后,您的 bean 模型将通过 AJAX 在幕后更新。
至于哪个事件发生的第一个问题,您需要了解触发向服务器发送 AJAX 请求的是 JavaScript 事件,因此自然而然,后者首先发生。此外,当 AJAX 响应成功提交时,您可以通过指定onevent
属性附加客户端回调以获取 JavaScript 挂钩。
我的代码:
<h:inputText id="appleNO" value="#{xxxModel.appleNO}" size="3" maxlength="3">
<f:ajax event="blur" execute="@form" listener="#{xxxController.xxxAction()}" render="appleNO"/>
</h:inputText>
当文本框丢失焦点(onblur)时,将触发 xxxAction。