4

我需要在网格布局中的 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) 在 OutputStream 中返回图表的 BufferedImage,但它仅适用于一个图表。其他三个图表在调用所有浇注动作的顺序上有所不同。

PlotService 是我写的,是的。在这个实现中,我将从 response.outputStream 得到的 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);
}

那么,有没有办法确保在启动下一个动作之前完成一个动作?

提前致谢!

4

1 回答 1

1

每个获取图像的请求都由浏览器异步处理。每个请求都在服务器上自己的线程中运行。使用 img 标签,浏览器控制 GET 请求以获取图像,因此我认为您不能轻易保证顺序,也不应该这样做。

您是否看到任何错误?

我会查看 firebug 或等效输出以查看浏览器是否出现错误。对于任何图像请求。

我还会尝试将调试器附加到您的服务器。

你写了 PlotService 吗?您需要确保它是线程安全的。

另外,我没有看到您阅读任何参数,每个图像是否有单独的操作?

于 2010-12-07T16:32:52.003 回答