Я хочу создать компонент, который можно использовать как:
<mc:chart data="#{bean.data}" width="200" height="300" />
где #{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 />
. Но я хотел бы создать свой собственный компонент, который получает данные и рисует диаграмму.
Я пользуюсь фейслетами, но это не так важно. Есть идеи, как создать нужный компонент?
P.S. Одно из решений, о котором я думал, это не использовать <o:dynamicImage/>
и использовать какой-нибудь сервлет для потоковой передачи изображения. Но я не знаю, как правильно это реализовать и как связать компонент jsf с сервлетом и как сохранить уже построенные изображения диаграмм (создание нового одинакового изображения для каждого запроса может вызвать проблемы с производительностью imho) и т. Д.