f:ajax by onchange event

f:ajax by onchange event

本文关键字:onchange event by ajax      更新时间:2023-09-26

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

我可以通过Javascript处理组件:

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

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

<f:ajax execute="name"/>

如何组合?


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

什么处理得更快?Ajax事件处理还是JavaScript处理?

简单,AJAX是为页面上发生的部分提交/更新而设计的。您只需要指定<f:ajax>标记的event属性,并根据需要将其设为change。根据提交的部分表单,在标记的execute属性中指定要在服务器上更新的组件的ID。但由于<f:ajax>execute的默认值正是@this(触发事件的组件),因此可以完全省略它。像这样:

<h:inputText id="text" value="#{bean.text}">
    <f:ajax event="change"/>
</h:inputText>

这样,在JavaScript更改事件发生后,您的bean模型将通过AJAX在幕后进行更新。

关于哪个事件首先发生的问题,您需要了解是JavaScript事件触发了向服务器发送AJAX请求,所以,自然地,后者首先发生。此外,当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>

当文本框丢失foucs(onblur)时,将触发xxxAction。