2

我有一个特殊的问题:我需要通过客户端 onchange 事件向服务器发送一个值而不提交整个表单。有什么功能可以做到吗?

我可以通过 Javascript 处理组件:

<h:inputText onchange= ...js... >

我可以通过 ajax 发送一个值:

<f:ajax execute="name"/>

如何组合起来?


解决了,但我还有一个问题:

什么处理得更快——事件的 Ajax 处理或 JavaScript 处理?

4

2 回答 2

6

很简单,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 挂钩。

于 2013-07-23T09:58:31.520 回答
1

我的代码:

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

于 2016-05-17T03:53:50.047 回答