2010-12-07 47 views
4

je dois montrer quatre graphiques sur une page Grails dans une présentation de la grille avec des positions 11, 12, 21 et 22. Chaque tableau est construit avec un code similaire à:Comment utiliser plusieurs avec un OutputStream

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

le code de l'action de construction graphique est:

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) retourne un BufferedImage du tableau à l'intérieur du OutputStream, mais il ne fonctionne que pour un graphique. Les trois autres graphiques varient selon l'ordre dans lequel toutes les actions sont appelées.

PlotService a été écrit par moi, oui. Dans cette implémentation, je passe le OutputStream que j'ai reçu de response.outputStream et de String idPOvalue à la méthode Java. La mise en œuvre de plotPareto est la suivante:

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

Alors, est-il un moyen de faire en sorte qu'une action soit terminée avant de tirer le prochain?

Merci d'avance!

Répondre

1

chaque requête pour obtenir une image est traitée de façon asynchrone par le navigateur. Chaque requête s'exécute dans son propre thread sur le serveur. Avec les balises img, le navigateur contrôle les requêtes GET pour obtenir les images, donc je ne pense pas que vous puissiez facilement garantir la commande, et vous ne devriez pas avoir à le faire.

Voyez-vous des erreurs?

Je regarderais le firebug ou la sortie équivalente pour voir si le navigateur reçoit une erreur. pour l'une des demandes d'image.

Je voudrais également essayer d'attacher un débogueur à votre serveur.

Avez-vous écrit le PlotService? Vous devez vous assurer que le thread est sûr.

En outre, je ne vois pas vous lire des paramètres, y at-il une action distincte pour chaque image?

+0

Vous pouvez également essayer de vider le flux de sortie. – hvgotcodes