当前位置: 首页 > 面试题库 >

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

孙朗
2023-03-14
问题内容

有一种简单的方法可以在调用之前和之后调用JavaScript动作<f:ajax listener>,例如,我想在后备bean中调用window.alert("pre") 之前window.alert("post")
之后 调用JavaScript动作:onChange``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:ajax元素似乎不起作用(也许应该吗?!),例如

<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");
    }
}

ACtrl.onChange被调用。


问题答案:

使用onevent属性。它必须指向一个回调函数引用(所以不要包括括号!):

<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;
    }
}


 类似资料:
  • 问题内容: 在托管bean中使用适当的值正确生成了页面,但是这两个h:selectOneMenus中的ajax事件不起作用。不调用侦听器。标签内一定有错误,但我看不到。 托管Bean: 更新: 我发现了一些有趣的东西: 标签不工作,,,。在这种情况下,不会注意到属性中的错误值,但是属性的错误值会产生错误。 ,可以正常使用 问题答案: 该要求包含在HTML文件之中。它包含用于执行JSF ajax魔术

  • 如果你希望在每次运行 Puppet 之前执行命令,可以在配置文件中使用 prerun_command 配置。 类似地,你也可以使用 postrun_command 配置运行 Puppet 之后需要执行的命令。 这种机制为 Puppet 与其他软件的集成提供了强大的钩子,甚至可以触发其他机器上的事件。 prerun 和 postrun 命令必须能成功运行(即其返回的状态码为 0),否则 Puppet

  • 问题内容: 以下两段代码之间的区别是什么? 和 问题答案: 的形式被提交时将只被调用 和 提交的值是从初始值不同。因此, 仅触发HTML DOM 事件时不会调用它。如果您想在HTML DOM 事件期间提交表单,则需要向输入组件添加另一个没有listener(!)的表单。它将导致仅处理当前组件的表单提交(如中所述)。 当使用代替时,默认情况下它将在HTML DOM 事件期间执行。在表示复选框或单选按

  • 我们有web服务(jaxws),它正在调用另一个web服务(aslo jaxws)。Jaxws客户端配置如下所示-- 正如您所看到的,我们有两个拦截器和一个故障侦听器。我们希望在这些拦截器、故障侦听器和web服务代码之间进行通信。正如SO线程中所述,我们使用cxf交换对象在web服务和拦截器之间进行通信。 我们的inFaultInterceptor代码如下所示-- } Web服务代码如下所示- 但

  • 问题内容: 我很好奇这两种执行ajax调用的方式有什么区别: 和 看来人们使用第一种方法的频率更高,但是第二种方法似乎也能正常工作… 问题答案: 第一种方法允许通过返回结果进行导航,而第二种则不能。如果客户端禁用了JS,第二种方法将不会调用任何内容,而第一种方法会正常降级。确实,第一种方法被更频繁地使用。 第二种方法是组件中没有属性的唯一方法,例如等等。

  • 在Spring应用程序启动时,我想在Redis中查找一个值,并根据该值关闭或保留消息侦听器。 完全不初始化这些bean也是可以的,但是我也找不到方法。 目前,我正在尝试使用Spring的关闭容器: 容器 消息侦听器: 问题是,如果我用已经在队列中的消息启动应用程序,消息侦听器将在执行之前拾取消息。 有办法实现我的目标吗?即使采用不同的方法