方法

2010-12-07 5 views
4
私は各チャートはのようなコードで構築されて位置11、12、21、22とグリッドレイアウトでGrailsのページ上に4つのグラフを表示する必要があり

方法

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

ジャワp11.paretoPlot(OUT、idPOvalueは)のOutputStream内部チャートのBufferedImageを返し、それだけで1つのグラフのために働きます。他の3つのチャートは、すべてのポアアクションが呼び出される順番によって異なります。

PlotServiceは私によって書かれました。この実装では、Response.outputStreamとString idPOvalueから取得したOutputStreamを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

イメージを取得する各リクエストは、ブラウザによって非同期に処理されます。各要求は、サーバー上の独自のスレッドで実行されます。 imgタグでは、ブラウザはGET要求を制御して画像を取得するので、注文を簡単に保証することはできません。

エラーが発生しましたか?

ブラウザがエラーを起こしているかどうかを調べるために、Firebugまたは同等の出力を調べます。いずれかの画像要求に対して

また、サーバーにデバッガを接続しようとします。

PlotServiceを作成しましたか?スレッドセーフであることを確認する必要があります。

また、私はあなたがどんなパラメータを読んでもらえません、それぞれのイメージに別々のアクションがありますか?

+0

出力ストリームをフラッシュすることもできます。 – hvgotcodes