Iterações com HashMap em Jsf

Alguém pode me dar uma idéia como fazeria esta implementação em jsf, exibindo numa tabela …

Obrigado.


//		for (String terminal : agrupamento.keySet())
//		{
//			Map<Date, Collection<Dado>> mapaTerminal = agrupamento.get(terminal);
//			BigDecimal somaTerminal = BigDecimal.ZERO;
//			
//			for (Date data : mapaTerminal.keySet())
//			{												
//				Collection<Dado> dados = mapaTerminal.get(data);
//				System.out.println("..............................................................................");
//				System.out.println("\n\nTerminal.....: " + terminal + " Data .......: " + data +"\n\n");
//				System.out.println("..............................................................................");
//				
//				BigDecimal somaData = BigDecimal.ZERO;
//				
//				for (Dado dadoLinha : dados)
//				{
//					System.out.println("Terminal...: " + dadoLinha.getTerminal()+ "Agencia....: " + dadoLinha.getAgencia() + " Conta...: " + dadoLinha.getConta() + " Via...: " + dadoLinha.getVia() + " Valor....: " +dadoLinha.getValor());
//					somaData = somaData.add(dadoLinha.getValor());
//				}
//				
//				System.out.println("..............................................................................");
//				System.out.println("Total por data         " + somaData);
//				System.out.println("..............................................................................");
//				somaTerminal = somaTerminal.add(somaData);
//			}			
//			System.out.println("..............................................................................");
//			System.out.println("Total por terminal         " + somaTerminal);
//			System.out.println("..............................................................................");
//		}

foi mal pessoal, coloquei o código com comentário:


		for (String terminal : agrupamento.keySet())
		{
			Map<Date, Collection<Dado>> mapaTerminal = agrupamento.get(terminal);
			BigDecimal somaTerminal = BigDecimal.ZERO;
			
			for (Date data : mapaTerminal.keySet())
			{												
				Collection<Dado> dados = mapaTerminal.get(data);
				System.out.println("..............................................................................");
				System.out.println("\n\nTerminal.....: " + terminal + " Data .......: " + data +"\n\n");
				System.out.println("..............................................................................");
				
				BigDecimal somaData = BigDecimal.ZERO;
				
				for (Dado dadoLinha : dados)
				{
					System.out.println("Terminal...: " + dadoLinha.getTerminal()+ "Agencia....: " + dadoLinha.getAgencia() + " Conta...: " + dadoLinha.getConta() + " Via...: " + dadoLinha.getVia() + " Valor....: " +dadoLinha.getValor());
					somaData = somaData.add(dadoLinha.getValor());
				}
				
				System.out.println("..............................................................................");
				System.out.println("Total por data         " + somaData);
				System.out.println("..............................................................................");
				somaTerminal = somaTerminal.add(somaData);
			}			
			System.out.println("..............................................................................");
			System.out.println("Total por terminal         " + somaTerminal);
			System.out.println("..............................................................................");
		}

Eu não entendi muito o que você quer fazer, ao menos não estou conseguindo visualizar como gostaria (deve ser por causa do feriado!).
Tem alguma imagem de como você gostaria que sua datatable ficasse?

mais ou menos assim :

Terminal 01 | Data 01/05/2008

coluna1|coluna2
XXXXX |zzzzzzz
XXXXX |zzzzzzz
XXXXX |zzzzzzz
XXXXX |zzzzzzz

Terminal 01 | Data 01/05/2009

coluna1|coluna2
XXXXX |zzzzzzz
XXXXX |zzzzzzz
XXXXX |zzzzzzz
XXXXX |zzzzzzz

Terminal 02 | Data 01/05/2005

coluna1|coluna2
XXXXX |zzzzzzz
XXXXX |zzzzzzz
XXXXX |zzzzzzz
XXXXX |zzzzzzz

Terminal 02 | Data 01/05/2006

coluna1|coluna2
XXXXX |zzzzzzz
XXXXX |zzzzzzz
XXXXX |zzzzzzz
XXXXX |zzzzzzz

Mais ou menos assim

Olha se os componentes do Richfaces podem te ajudar :slight_smile: Ele possui uns componentes para formatação de datatable bem bacanas!

meu problema não é tanto a formatação mas assim a iteração, como vou fazer a iteração da mesma maneira que fiz em Java;

Os componentes de datatable do Richfaces possuem um DataModel se não me engano, dai você pode organizar tua estrutura de acordo com o datamodel do componente, assim é possível que você consiga o que quer.

Ou você poderá utilizar um datatable dentro de outro :slight_smile:

Ou não utilizar datatable, mas sim o componente ui:repeat do Facelets ou o componente a4j:repeat (acho que é este o nome!) do Ajax4jsf.

Ou poderá gerar a tabela através de javascript mesmo.

Tem o datalist, tb que repete.

E se vc quiser, pode usar iteração em java mesmo, e usar um binding por exemplo num PanelGrid…

Pra ajudar (não achei muito fácil como fazer), no jsp ficaria

&lt;h:panelGrid binding="#{meuMBean.tabela}" columns="4"/&gt;

e por exemplo, no método “getTabela” do meuMBean

private UIComponent tabela; 

public UIComponent getTabela() throws IOException {

  tabela = new UIPanel();

  HtmlOutputText outputTextNome = (HtmlOutputText) app
					.createComponent(HtmlOutputText.COMPONENT_TYPE);
  outputTextNome.setValue("texto qualquer, que vai ser uma célula inteira");
  outputTextNome.setStyleClass("cssCampo");

  tabela.getChildren().add(outputTextNome);

  return tabela;
}

public void setTabela(UIComponent tabela){
  this.tabela = tabela; 
}