一尘不染

JSF状态栏/连接状态信息

ajax

我想为我的用户提供一种有关进度状态的信息。我发现了几个组件,例如:

Richfaces状态IceFaces连接状态

因此,我想在页面上添加类似的内容,尤其是对于ajax请求。最简单的实现方法是什么?我不想使用这些组件之一,而是想编写自己的组件,但我无法想象它需要多少努力:-)

我很感谢你的想法…


阅读 205

收藏
2020-07-26

共1个答案

一尘不染

标准的JSF实现没有为此提供现成的组件。但是,JSF
2.0规范
在第13.3.5.2章中概述了以下内容:

13.3.5.2监视所有Ajax请求的事件

JavaScript
API提供了jsf.ajax.addOnEvent可用于注册JavaScript功能的功能,当发生任何Ajax请求/响应事件时,该功能将得到通知。有关更多详细信息,请参见第14.4节“注册回调函数”。该jsf.ajax.addOnEvent函数接受一个JavaScript函数参数,当在任何Ajax请求/响应事件周期中发生事件时,该参数将被通知。该实现必须确保必须根据表14-3“事件”中概述的事件来调用已注册的JavaScript函数。

您可以在此处找到有关Mojarra开发人员之一的博客,其中包含基本示例。这是相关的摘录:

<h3> Status:</h3>
<textarea id="statusArea" cols="40" rows="10" readonly="readonly" />

一个简单的文本区域,甚至没有与后端服务器数据模型挂钩。

然后在我们的javascript中(对于演示,在一个单独加载的文件中,尽管它可以很容易地出现在页面中),我们有:

var statusUpdate = function statusUpdate(data) {
    var statusArea = document.getElementById("statusArea");
    var text = statusArea.value;
    text = text + "Name: "+data.source.id;
    if (data.type === "event") {
        text = text +" Event: "+data.name+"\n";
    } else {  // otherwise, it's an error
        text = text + " Error: "+data.name+"\n";
    }
    statusArea.value = text;
};

// Setup the statusUpdate function to hear all events on the page
jsf.ajax.addOnEvent(statusUpdate);
jsf.ajax.addOnError(statusUpdate);
2020-07-26