Gerar html dinamicamente

Pessoal, preciso de uma ajuda…

É o seguinte:

Tenho um array com datas. Essas datas correspondem a 2 anos e 6 meses.

Aí pego as datas do array e gero uma coluna na tabela para cada mês de cada data. Até aí tudo bem.

O meu problema é que preciso gerar uma linha e coluna acima dos meses de cada ano para agrupar os meses por ano.

Eu estava tentando com o “colspan” mas não tive êxito.

Alguém pode me ajudar?

Desde já agradeço

String[] datas = {"01-01-2012","01-02-2012","01-03-2012","01-04-2012","01-05-2012","01-06-2012","01-07-2012","01-08-2012",
"01-09-2012","01-10-2012","01-11-2012","01-12-2012","01-01-2013","01-02-2013","01-03-2013","01-04-2013","01-05-2013",
"01-06-2013","01-07-2013","01-08-2013","01-09-2013","01-10-2013","01-11-2013","01-12-2013","01-01-2014",
"01-02-2014","01-03-2014","01-04-2014","01-05-2014","01-06-2014"} ;

  out.println("<table border='1' width='300px'>");
  out.println("<tr>");
  int i = 0;
  
  SimpleDateFormat data_formatadaMes = new SimpleDateFormat("dd-MM-yyyy");
  Date data_comp = null;
  String mes = "";
  
  int tamanho = datas.length;

  double colunas = tamanho / 12;
  
      for (int j = 1; j <= colunas; j++){
    	
        int cols = (j * 12); 
      
     
	  out.println("<td align='center' colspan="+cols+">" + tamanho + "");
	  if(cols % 12 == 0)
		  out.println("<td align='center' colspan="+cols+">" + tamanho + "</td>");
      }


  out.println("</tr>");
  out.println("<tr>");


  for(String data: datas){
	  
	  SimpleDateFormat data_formatadaMes1 = new SimpleDateFormat("MM");
	  data_comp = data_formatadaMes.parse(data);
	  mes = data_formatadaMes1.format(data_comp);
	  
	  int mesInt = Integer.parseInt(mes);
	  
	if (mesInt == 1){
		  
		  mes = "Jan";
	}
	if (mesInt ==  2){
			  
		  mes = "Fev";
	}
	if (mesInt == 3){
		  
		  mes = "Mar";
	}
	if (mesInt == 4){
		  
		  mes = "Abr";
	}
	if (mesInt == 5){
		  
		  mes = "Mai";
	}
	if (mesInt == 6){
		  
		  mes = "Jun";
	}
	if (mesInt == 7){
		  
		  mes = "Jul";
	}
	if (mesInt == 8){
		  
		  mes = "Ago";
	}
	if (mesInt == 9){
		  
		  mes = "Set";
	}
	if (mesInt == 10){
		  
		  mes = "Out";
	}
	if (mesInt == 11){
		  
		  mes = "Nov";
	}
	if (mesInt == 12){
		  
		  mes = "Dez";
	}
    
	
	
    out.println("<td align='center'>" + mes + "</td>");

  i++;   
   //if(i % 6 == 0)
	 
     //out.println("</tr><tr>");

  }
  out.println("</tr></table>"); 

Algumas dicas que podem te dar:

  • De início você tem um array de strings.
    Seria mais interessante realmente um array de Date.
    Crie esse array convertido.

  • Se for criar colunas apenas para os meses presentes no array, não precisará de 12 por ano.

  • Armazene os valores em estrutura mais adequadas.
    Você precisa saber o total de meses por ano, e ter esses meses separados.
    Acho que um Map<String, List><String>> te ajudaria muito aqui.

  • Você vai precisar do colspan, mas o número vai ser varíavel por ano.

  • Se criar um SimpleDateFormat com o pattern MMM, ele já formata o mês com a abreviatura.
    Não precisa daquele if gigantesco.

  • Não sei se esse código está num servlet.
    Mas geralmente é bem mais simples utilizar um mecanismo de template para o html (como jsp por exemplo).