使用JSF AJAX方法保持JavaScript模块作用域

Using JSF AJAX methods to keep JavaScript module scope

本文关键字:JavaScript 模块 作用域 JSF AJAX 方法 使用      更新时间:2023-09-26

我正在使用具有JSF2框架的应用程序。该框架的思想是管理后端(Java)和前端之间的连接。

我知道,我们使用的JSF版本创建了 JSF。ajax对象,其中包含执行传递和获取数据的几个方法。

因此,我正在构建基于模块模式的前端架构,每个模块都有私有范围。在几个模块中,我需要进行AJAX调用以从后端获取一些数据,但是如果我通过调用a4j:jsFunction(先前创建的)来使用JSF的标准方式,我将立即失去JavaScript模块的作用域。并且,当然不能返回到模块。

因此,我想问的是,是否有可能存档类似于jQuery.ajax()方法使用jsf。Ajax 对象及其方法(请求/响应)?!

jQuery.ajax({
  url: "", // I don't have url as in PHP, I have JSF action listener #{method.function}
  data: { param: 'value' }, // params for method.function
  success: function(data){
    // yes I need to receive the data from Backend (maybe #{bean} or JSON)
  }
});

我坚信,有一种方法可以通过保持JavaScript模块的作用域来使用JSF和AJAX for Java (A4J)来归档我的需求,而在进行AJAX调用时无需超出该范围。

如果您需要一个ajax组件从服务器上发布/检索任意数据,那么我不认为jsf。Ajax是适合您的工具。它与JSF表示严格耦合,可用于调用服务器逻辑和呈现部分html页面。响应将是带有部分更新的XML。下面我将描述如何使其符合您的目的,但这不是该api的预期应用。

简而言之,它必须像这样命名:

jsf.ajax.request(<DOM_node>, event, {render: "<rendered_id>", execute: "@this"})

其中DOM_node是具有动作监听器的元素,事件是侦听器支持的类型的JS事件(如果您使用jsf.ajax.request作为onclick,那么只是"事件"变量将可用,您可以按原样传递它)。& lt; rendered_id>应该是围绕您想要作为回调执行的脚本的JSF组件的客户端id。

结果调用应该要求JSF执行附加到与DOM_node(如commandLink)相对应的组件的操作监听器,并使用呈现组件中包含的呈现区域。如果它包含html