Как использовать несколько с одним OutputStream - PullRequest
4 голосов
/ 07 декабря 2010

Мне нужно показать четыре диаграммы на странице Grails в макете сетки с позициями 11, 12, 21 и 22. Каждая диаграмма построена с кодом, подобным:

<img src="${createLink(controller:'paretoChart', action:'buildParetoChart11')}"/>

Код дляДействие построения диаграммы:

    def buildParetoChart11 = {
        def PlotService p11 = PlotService.getInstance()

        def poList = paretoChartService.getParetoidPO()
        def listCounter = 0 

        def idPO = poList[listCounter]
        idPO.toString()
        def String idPOvalue = idPO

        def out = response.outputStream

        out = p11.paretoPlot(out, idPOvalue)
        response.setContentType("image/jpg")
        session["idPOList11"] = poList
}

Java p11.paretoPlot (out, idPOvalue) возвращает BufferedImage диаграммы внутри OutputStream, но она работает только для одной диаграммы.Остальные три диаграммы меняются в зависимости от порядка, в котором вызываются все действия заливки.

PlotService был написан мной, да.В этой реализации я передаю OutputStream, полученный из response.outputStream и String idPOvalue, в метод Java.Реализация plotPareto выглядит следующим образом:

public OutputStream paretoPlot(OutputStream out, String po) throws IOException {
    chart = buildParetoChart(po);// here the chart is actually built
    bufferedImage = chart.createBufferedImage(350, 275);
    ChartUtilities.writeBufferedImageAsJPEG(out, bufferedImage);
}

Итак, есть ли способ убедиться, что одно действие завершено, прежде чем запускать следующее?

Заранее спасибо!

1 Ответ

1 голос
/ 07 декабря 2010

каждый запрос на получение изображения обрабатывается браузером асинхронно. Каждый запрос выполняется в своем собственном потоке на сервере. С помощью тегов img браузер контролирует запросы GET для получения изображений, поэтому я не думаю, что вы можете легко гарантировать заказ, и вам не нужно это делать.

Вы видите какие-либо ошибки?

Я бы посмотрел на firebug или эквивалентный вывод, чтобы увидеть, если браузер получает ошибку. для любого из запросов изображения.

Я бы также попытался подключить отладчик к вашему серверу.

Вы написали PlotService? Вы должны убедиться, что это потокобезопасный.

Кроме того, я не вижу, чтобы вы читали какие-либо параметры, есть ли отдельное действие для каждого изображения?

...