我想为我的用户提供一种有关进度状态的信息。我发现了几个组件,例如:
Richfaces状态或IceFaces连接状态
因此,我想在页面上添加类似的内容,尤其是对于ajax请求。最简单的实现方法是什么?我不想使用这些组件之一,而是想编写自己的组件,但我无法想象它需要多少努力:-)
我很感谢你的想法…
标准的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函数。
JavaScript API提供了jsf.ajax.addOnEvent可用于注册JavaScript功能的功能,当发生任何Ajax请求/响应事件时,该功能将得到通知。有关更多详细信息,请参见第14.4节“注册回调函数”。该jsf.ajax.addOnEvent函数接受一个JavaScript函数参数,当在任何Ajax请求/响应事件周期中发生事件时,该参数将被通知。该实现必须确保必须根据表14-3“事件”中概述的事件来调用已注册的JavaScript函数。
jsf.ajax.addOnEvent
您可以在此处找到有关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);
<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);