jFreeChart - separar gráficos

0 respostas
narahaddad

Estou com um pequeno problema para gerar gráficos utilizando o jFreeChart.
Procurei no GUJ e em outras fontes, mas não encontrei nenhum caso similar.

Preciso gerar gráficos agrupados por um código - no caso código de agências bancárias. Ou seja, se minha lista retorna dados referentes as agências 1221 e 2020, preciso criar 02 imagens de 02 gráficos separadamente.
Eu utilizo o mediaOutput para exibir a imagem do gráfico gerada, como não sei a quantidade de gráficos que deverá ser exibida, utilizei o repeat para reservar este espaço.
Problema: o repeat não executa o createContent as 02 vezes, o executa apenas 01 vez e exibe a mesma imagem 02 vezes (ao invés de gerar a 2ª imagem, repete a 1ª).

BEAN

/**
	 * Nome: generateTela
	 * Propósito: Montar e exibir o gráfico na tela
	 * 
	 * @param OutputStream out
	 * @param Object data
	 */
	public void generateTela(OutputStream out, Object data) throws Exception {
	
		List<RelatRegistroCartaJuncaoDataObject> listaRelatorioRelatorioCartaJuncaoDataObject = 
						relatRegistroCartaJuncaoService.listar(this.dtInicio,
																this.dtTermino,
																this.selectApos,
																this.cdPlataformaAtendimento,
																this.cdDependencia,
																this.cdFuncionarioOperadorSistema,
																this.cdSegmento,
																this.cdModalidade);

		CategoryDataset dataset = createDataset(listaRelatorioRelatorioCartaJuncaoDataObject);
				
		JFreeChart chart = createChart(dataset);
				
		BufferedImage buffImg = chart.createBufferedImage(
						511, //width 
		   				270, //height  
		   				BufferedImage.TYPE_INT_RGB, //image type
		   				null);
		        
		ImageIO.write(buffImg, "jpeg", out); 
	}


	/**
	 * Nome: createDataset
	 * Propósito: Identificar os dados a serem informados no gráfico
	 * 
	 * @param lista
	 * @return dataset
	 */
	private CategoryDataset createDataset(List<RelatRegistroCartaJuncaoDataObject> lista) {
	
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		int agenciaAnterior=lista.get(0).getCdAgencia();
		
		for (int i = 0; i < lista.size(); i++) {
			
			if(lista.get(i).getCdAgencia() == agenciaAnterior){
				RelatRegistroCartaJuncaoDataObject relatJuncao = lista.get(i);
				String item = relatJuncao.getCdAgencia().toString();
				
				String modalidade = relatJuncao.getModalidade();
				
				dataset.addValue(relatJuncao.getQuantidadeTransacao(), modalidade, item);
				
				agenciaAnterior=lista.get(i).getCdAgencia();
			}
		}
		return  dataset;
	}

JSP

<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>

<a4j:repeat value="#{registrosCartasJuncaoBean.listaRelatorioJuncao}">
	<br:brColumn>
		<br:brPanelGrid columns="1" align="center">
			<br:brColumn>
				<a4j:mediaOutput element="img" cacheable="false" session="true"
						id="grafico" mimeType="image/jpeg"
					        createContent="#{registrosCartasJuncaoBean.generateTela}" />
			</br:brColumn>
		</br:brPanelGrid>
	</br:brColumn>
</a4j:repeat>

(Obs.: O método utilizado pelo repeat retorna apenas o número de vezes que devo repetir o mediaOutput, por este motivo não o inclui aqui. Também não inclui o método createChart propositalmente, visto que este não interferirá no entendimento.)

Segue abaixo o comportamento atual da geração dos relatórios (esquerda) e o comportamento correto (direita).

Alguém consegue me orientar quanto a isso ? Meu problema é na lógica? No JSP ? Nos componentes que estou utilizando ? … enfim…


Criado 12 de setembro de 2011
Respostas 0
Participantes 1