1

我想创建一个可以像这样使用的组件:

<mc:chart data="#{bean.data}" width="200" height="300" />

where#{bean.data}返回一些对象或图表模型对象或其他可以表示为图表的集合(简单地说,假设它返回整数集合)。

我希望这个组件生成这样的 html:

<img src="someimg123.png" width="200" height="300"/>

问题是我有一些可以接收数据并返回图像的方法,例如:

public RenderedImage getChartImage (Collection<Integer> data) { ... }

而且我还有一个用于绘制动态图像的组件:

<o:dynamicImage width="200" height="300" data="#{bean.readyChartImage}/> 

该组件根据我的需要生成html,但它的参数是字节数组或RenderedImage,即它需要bean这样的方法:

public RenderedImage getReadyChartImage () { ... }

因此,一种方法是propertyChangedListener在提交时使用Collection<Integer>为绘制图表设置数据(),然后使用<o:dynamicImage />组件。但我想创建自己的组件来接收数据并绘制图表。

我正在使用facelets,但它确实不是那么重要。任何想法如何创建所需的组件?

PS 我正在考虑的一个解决方案是不使用<o:dynamicImage/>和使用一些 servlet 来流式传输图像。但我不知道如何正确实现它以及如何将 jsf 组件与 servlet 绑定以及如何保存已经构建的图表图像(为每个请求生成新的相同图像可能会导致性能问题恕我直言)等等。

4

1 回答 1

1

PS 我正在考虑的一个解决方案是不使用和使用一些 servlet 来流式传输图像。但我不知道如何正确实现它以及如何将 jsf 组件与 servlet 绑定以及如何保存已经构建的图表图像(为每个请求生成新的相同图像可能会导致性能问题恕我直言)等等。

只需给它一个 URL 作为属性,以便它最终成为<img src="url">并让该 URL 指向 servlet。让 servlet 根据请求参数或 URL 中的 pathinfo 提供的信息生成/返回图像。

至于缓存,只需通过某个唯一标识符将其存储在磁盘文件系统或数据库中的某个位置,然后让每个请求的 servlet 检查它是否存在并进行相应处理。

为此,所有标准<h:graphicImage>都已经足够了。只需使 URL 动态化。

于 2010-04-27T23:30:37.537 回答