在调用 f:ajax 侦听器之前和之后执行 JavaScript

2024-04-18

有一种简单的方法可以在调用之前和之后调用 JavaScript 操作<f:ajax listener>,例如我想调用window.alert("pre") before and window.alert("post") after onChange在支持 bean 中调用ACtrl:

<h:form>
    <h:inputText id="anId" value="#{cityCtrl.dbHost}">
        <f:ajax event="change" listener="#{aCtrl.onChange}" execute="@all"/>
    </h:inputText>
</h:form>
@ManagedBean
public class ACtrlimplements Serializable {
    public void onChange(AjaxBehaviorEvent event) {
        System.out.println("something changed");
    }
}

添加多个f:ajaxelements 似乎不起作用(也许应该?!),例如在

<h:form>
    <h:inputText id="anId" value="#{cityCtrl.dbHost}">
        <f:ajax event="change" listener="#{aCtrl.toggle}" execute="@all"/>
        <f:ajax event="change" listener="#{aCtrl.onChange}" execute="@all"/>
        <f:ajax event="change" listener="#{aCtrl.toggle}" execute="@all"/>
    </h:inputText>
</h:form>
@ManagedBean
public class ACtrlimplements Serializable {
    public void onChange(AjaxBehaviorEvent event) {
        System.out.println("something changed");
    }

    public void toggle(AjaxBehaviorEvent event) {
        System.out.println("blah");
    }
}

only ACtrl.onChange被调用。


Use onevent http://docs.oracle.com/javaee/7/javaserverfaces/2.2/vdldocs/facelets/f/ajax.html属性。它必须指向回调函数引用(因此不要包含括号!):

<f:ajax ... onevent="functionName" />

实际的回调函数如下所示(JSF 将自行提供参数):

function functionName(data) {
    var status = data.status; // Can be "begin", "complete" or "success".
    var source = data.source; // The parent HTML DOM element.

    switch (status) {
        case "begin": // Before the ajax request is sent.
            // ...
            break;

        case "complete": // After the ajax response is arrived.
            // ...
            break;

        case "success": // After update of HTML DOM based on ajax response.
            // ...
            break;
    }
}

也可以看看:

  • JSF 2.0 规范 http://download.oracle.com/otndocs/jcp/jsf-2.0-fr-eval-oth-JSpec/- 表 14.3 和 14.4
  • 有没有办法禁用命令链接,直到呈现 ajax 响应 https://stackoverflow.com/questions/17734543/is-there-a-way-to-disable-the-command-link-until-the-ajax-response-is-rendered/
  • 如何在 JSF 2 中防止双击 https://stackoverflow.com/questions/10756426/how-to-do-double-click-prevention-in-jsf-2/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在调用 f:ajax 侦听器之前和之后执行 JavaScript 的相关文章