【问题标题】:f:ajax by onchange eventf:ajax 通过 onchange 事件
【发布时间】:2013-07-22 07:07:44
【问题描述】:

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

我可以通过Javascript处理组件:

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

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

<f:ajax execute="name"/>

如何组合?


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

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

【问题讨论】:

  • 是的,您可以使用ajax,这就是它被引入的原因,将特定的数据提交到服务器。你可以使用 Jquery 的 ajax 调用。Ref:api.jquery.com/jQuery.ajax
  • 也许这是一个解决方案:jsftoolbox.com/documentation/help/12-TagReference/core/…(监听器属性和实现handleEvent(AjaxBehaviorEvent事件)方法)。
  • 我想在服务器端解决它。我也可以使用事件属性:stackoverflow.com/questions/7886453/…
  • 好的,这将帮助您通过 jsf 标准进行 ajax 调用。我说的是纯 javascript lib (jQuery)。对不起,如果它是 Jquery 方式,那么我可以帮助你,而不是 jsf
  • 无论如何,谢谢,如果我发现 jsf 标准不起作用,我将使用您的解决方案 :-)。

标签: javascript ajax jsf


【解决方案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。

【讨论】:

    【解决方案2】:

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

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

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

    关于哪个事件首先发生的问题,您需要了解触发向服务器发送 AJAX 请求的是 JavaScript 事件,因此自然而然,后者首先发生。此外,您可以通过指定onevent 属性,在成功提交 AJAX 响应时附加客户端回调以获取 JavaScript 挂钩。

    【讨论】:

    • 但是如果我将 js onchange 事件处理程序添加到您的 h:inputText - 首先处理的是什么?我的意思是 Javascript。
    • 当然会先执行handler。此外,您可以从onchange 处理程序返回false 以停止发送AJAX 请求。
    猜你喜欢
    • 2021-02-14
    • 2018-03-03
    • 2016-02-21
    • 2010-12-10
    • 2011-03-29
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多