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}/> 

beanこのコンポーネントは必要に応じて html を生成しますが、パラメーターはバイト配列または RenderedImage です。つまり、次のようなメソッドが必要です。

public RenderedImage getReadyChartImage () { ... }

そこで、propertyChangedListeneron submit を使ってCollection<Integer>グラフを描画するためのデータ( )を設定してから、<o:dynamicImage />コンポーネントを使うのも一つの方法です。しかし、データを受け取ってグラフを描画する独自のコンポーネントを作成したいと思います。

私は facelets を使用していますが、それほど重要ではありません。目的のコンポーネントを作成する方法はありますか?

私が考えていたPS Oneの解決策は<o:dynamicImage/>、サーブレットを使用せず、画像をストリーミングすることです。しかし、それを正しく実装する方法、jsfコンポーネントをサーブレットと結び付ける方法、およびすでに構築されたチャート画像を保存する方法(リクエストごとに新しい同じ画像を生成すると、パフォーマンスの問題が発生する可能性があります)などはわかりません..

4

1 に答える 1

1

私が考えていたPS Oneの解決策は、サーブレットを使用せず、画像をストリーミングすることです。しかし、それを正しく実装する方法、jsfコンポーネントをサーブレットと結び付ける方法、およびすでに構築されたチャート画像を保存する方法(リクエストごとに新しい同じ画像を生成すると、パフォーマンスの問題が発生する可能性があります)などはわかりません..

URL を属性として指定するだけで、<img src="url">その URL がサーブレットを指すようになります。サーブレットは、リクエスト パラメータまたは URL のパス情報によって提供される情報に基づいて画像を生成/返します。

キャッシングに関しては、一意の識別子によってディスク ファイル システムまたは DB のどこかに保存し、リクエストごとにサーブレットがそこにあるかどうかをチェックし、それに応じて処理するようにします。

このためには、すべての標準<h:graphicImage>ですでに十分です。URLを動的にするだけです。

于 2010-04-27T23:30:37.537 に答える