作者简介:Marc Durocher是ILOG的一名软件架构师,ILOG是一家企业级软件组件和服务提供商。Marc Durocher在ILOG负责开发ILOG JViews生产线上的JSF组件。他已在图形软件组件行业工作十多年,自2000年起一直在ILOG工作。可以通过mailto:mdurocher@ilog.fr联系Marc。
在前面的文章中,我们讨论了JFS(Java Server Faces)的基础知识。本月我们继续讲述设计一个高级JSF图形组件的基本步骤。
我们将使用图表(charting)组件的一个实例,如为一组类别提供数据值分配视觉表现的ILOG JSF图表组件。此图表可显示一个带各种表示法,如条形图、饼图、气泡图等图形的数据组。
JSF图表组件有两个基本的设计限制:
为满足这些要求,我们建立了下面的解决方案:
。JSF呈现程序生成一个<IMG>标签与一组JavaScript对象(图1)。
。客户端向服务器请求一幅图像。这一过程通过恢复图表bean并应用由图表提供的方法生成一幅图像的servlet来完成。
下面的图示描述了这一解决方案的结构。
图1:JSF框架请求
图2:servlet获得图像请求
图3:页面请求或图像请求
JSF图表组件还伴随一组其它的JSF组件:
为呈现图表组件,你只需应用chartView标签:
表A
<jvcf:chartView id="c" style="width:500px;height:300px" … />
此数据在HTML页面显示为一幅图像。该图像由一个响应HTTP请求的servlet建立,此HTTP请求包括各种参数,这些参数指定输出的图像,图像映射的生成,插入式说明的生成等等。之后生成的图像被插入客户端DOM中,页面被更新的唯一部分就是图像本身。
下面我们来看一看一个简单的定制JSF组件与高级图表组件之间的差异:
组件
JSF图表组件类非常像一个标准的组件,只是增加了一个图表属性,此属性可访问负责生成显示在HTML页面上的图像的图表bean。JSF组件可通过一个绑定在当前任务或处于当前任务的值来本地恢复这个图表bean。当JSF图表组件是一个应用程序的中心组件时,可选的JSF组件,如overview或legend组件,就可连接到中心图表来显示额外信息。
表B
<jvcf:chartZoomInteractor id="chartZoomInteractor"
XZoomAllowed="true"
YZoomAllowed="true" />
<jvcf:chartView id="chartView"
chart=”#”
servlet="demo.ImageMapServlet"
interactorId="chartZoomInteractor"
width="500"
height="300"
styleSheets="/data/line.css"
waitingImage="data/images/wait.gif"
imageFormat="PNG" />
<jvcf:chartOverview id="chartOverview"
style="height:100;width:150px"
viewId="chartView"
lineWidth="3"
lineColor="red" />
<jvcf:chartLegend id="legendView"
viewId="chartView"
width="400"
height="180"
layout="vertical"
waitingImage="data/images/wait.gif" />