Problema para mostrar uma coleção em colunas numa tabela

2 respostas
dudaskank

Olá de novo pessoal

Estou com um problema… tenho uma coleção parecida com isso:

=======================
Produto   Mês    Valor
=======================
Produto1, Jan,   123.00
Produto1, Fev,   20.00
Produto1, Total, 143.00
Produto2, Jan,   223.00
Produto2, Fev,   40.00
Produto2, Total, 263.00
Produto3, Jan,   100.00
Produto3, Fev,   99.00
Produto3, Total, 199.00
=======================

Como podem ver, o mesmo produto aparece algumas vezes, mudando o mês e seu valor naquele mês. Então, quero transformar isso em uma tabela onde terei o produto na primeira coluna e o valor de cada mês nas colunas seguintes.

Para isso, antes fiz um processamento e peguei todos os nomes dos meses que aparecem, que são sempre os mesmos na mesma ordem para cada produto, e coloquei em uma Collection também.

O problema é que não consigo fazer isso usando o struts… tá difícil a coisa hehehe. Aqui está meu código cheio de erros:

<table cellpadding="0" cellspacing="0" border="1" style="margin-bottom: 1cm;">

	<tr class="rotuloLista7pt">
		<td width="300">Título da Tabela</td>

		<logic:iterate name="colunasRelatorio" id="coluna" scope="request">
		<td width="100"><bean:write name="coluna" property="value" /></td>
		</logic:iterate>
	</tr>

	<!-- os problemas começam por aqui... -->
	<bean:define id="colunasRelatorio" name="colunasRelatorio" type="java.util.Collection" scope="request" />
	<logic:iterate name="tabela" property="value" id="lista" indexId="coluna">

	<!-- se o índice for um múltiplo do número de colunas apresentadas, cria uma nova linha
	     e coloca o nome do produto -->
	<%= (coluna % colunasRelatorio.size()) == 0 ? "<tr><td>" + lista.getNome() + "</td>" : ""%>

		<td><bean:write name="lista" property="valorRealizadoMes" /></td>

	<!-- se o próximo índice for um múltiplo do número de colunas apresentadas, fecha a linha atual -->
	<%= ((coluna + 1) % colunasRelatorio.size()) == 0 ? "</tr>" : ""%>

	</logic:iterate>

</table>

Aqui estão os erros que o jboss me retornou…

Generated servlet error:
    [javac] Compiling 1 source file
    [javac] umPathGrandao\detalheProdutosTarifas_jsp.java:335: operator % cannot be applied to java.lang.Integer,int
    [javac]               out.print( (coluna % colunasRelatorio.size()) == 0 ? "<tr><td>" + lista.getNome() + "</td>" : "");
    [javac]                                  ^
    [javac] umPathGrandao\detalheProdutosTarifas_jsp.java:335: cannot resolve symbol
    [javac] symbol  : method getNome ()
    [javac] location: class java.lang.Object
    [javac]               out.print( (coluna % colunasRelatorio.size()) == 0 ? "<tr><td>" + lista.getNome() + "</td>" : "");
    [javac]                                                                                      ^
    [javac] umPathGrandao\detalheProdutosTarifas_jsp.java:342: operator + cannot be applied to java.lang.Integer,int
    [javac]               out.print( ((coluna + 1) % colunasRelatorio.size()) == 0 ? "</tr>" : "");
    [javac]                                   ^
    [javac] umPathGrandao\detalheProdutosTarifas_jsp.java:351: incompatible types
    [javac] found   : java.lang.Object
    [javac] required: java.lang.Integer
    [javac]             coluna = _jspx_coluna_1;
    [javac]                      ^
    [javac] 4 errors

Valeu pessoal, já agradeço desde já, hehehe, flw

2 Respostas

dudaskank

Bom, mudei um pouco o código e agora ela está assim:

<!-- os problemas começam por aqui... -->
	<bean:define id="colunasRelatorio" name="colunasRelatorio" type="java.util.Collection" scope="request" />
	<logic:iterate name="tabela" property="value" id="lista" indexId="coluna"
			type="br.gov.caixa.portalDaGestao.avgestao.bean.DetalheProdutosTarifas">

	<!-- se o índice for um múltiplo do número de colunas apresentadas, cria uma nova linha
	     e coloca o nome do produto -->
	<%= coluna.intValue() % colunasRelatorio.size() == 0 ? "<tr><td>" + lista.getNome() + "</td>" : ""%>

		<td><bean:write name="lista" property="valorRealizadoMes" /></td>

	<!-- se o próximo índice for um múltiplo do número de colunas apresentadas, fecha a linha atual -->
	<%= (coluna.intValue() + 1) % colunasRelatorio.size() == 0 ? "</tr>" : ""%>

	</logic:iterate>

Mas ainda continua dando um maldito erro >:-(

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: -1 in the jsp file: null

Generated servlet error:
    [javac] Compiling 1 source file
    [javac] C:\jboss\server\default\tmp\deploy\server\default\deploy\work\MainEngine\localhost\portaldagestao\jsp\avgestao\outrosRelatorios\detalheProdutosTarifas_jsp.java:353: incompatible types
    [javac] found   : java.lang.Object
    [javac] required: java.lang.Integer
    [javac]             coluna = _jspx_coluna_1;
    [javac]                      ^
    [javac] 1 error

O pior é que isso tá lá na servlet gerada, que merda isso…

dudaskank

bom, agora foi :slight_smile:

foi trocar o nome pra outra coisa que não fosse coluna, parece que estava em conflito com outro iterate mais acima que usava esse nome, sei lá…

ufa

Criado 26 de maio de 2006
Ultima resposta 26 de mai. de 2006
Respostas 2
Participantes 1