Blog do Urubatan
msgbartop
Desenvolvedor, Arquiteto, Palestrante, Coordenador do RSJUG, Patinador e Blogger
msgbarbottom

15 Nov 06 ICEFaces agora open source também!!! com exemplo de dataTable e campo de texto autoComplete!

O ICEFaces, uma biblioteca de componentes JSF com um ótimo suporte para AJAX agora é open source!
sim, eu sei que isto ja saiu em quase todos os blogs, mas a pequena diferença é que aqui eu estou mostrando também exemplos de coisas que são muuito fácil de fazer com esta biblioteca :D
Vejam só como é muito fácil fazer uma tabela com paginação via AJAX, e um campo de texto com auto complete!
o código do projeto, alguma documentação e alguns exemplos podem ser encontrados no endereço: http://www.icefaces.org/.
Eles disponibilizaam também plugins para algumas IDEs, que integram a biblioteca na IDE, como o Eclipse+WebTools+JSF, o JDeveloper, o NetBeans e o Java Studio Creator 2.

Acessei a página, baixei a biblioteca e o plugin para Eclipse + WebTools + JSF e instalei no meu eclipse …
depois disto é só seguir este passo a passo:

  1. Criei um novo projeto Web Dinâmico
  2. adicionei ai projeto as facets ICEFaces e Java Server Faces
  3. criei um managedbean escopo request (a forma fácil de fazer isto é abrir o faces-config.xml, dentro da página de managed beans clicar com o botão direito em request, new managed bean, marcar que quer criar uma classe nova e colocar o nome da classe e pacote desejados)
  4. criei uma página home.jsp com o template do ICEfaces (que basicamente é uma página JSP simples ja com a taglib do ICEFaces incluida)
  5. pronto, agora podemos começar a brincar!

TextBox com auto complete

dentro das tags: <ice:form> e </ice:form>
coloquei o código:

		
			
		

e no managed bean coloquei o seguinte código:

public class IceMBeanTest {
	private List
 list;

	public IceMBeanTest() {
		getBaseList();
	}

	private void getBaseList() {
		list = new ArrayList
();
		list.add(new SelectItem("urubatan", "Urubatan"));
		list.add(new SelectItem("urubatan", "Urubatan1"));
		list.add(new SelectItem("urubatan", "Urubatan2"));
		list.add(new SelectItem("urubatan", "Urubatan3"));
		list.add(new SelectItem("urubatan", "Urubatan4"));
		list.add(new SelectItem("aline", "Aline"));
		list.add(new SelectItem("aline", "Aline1"));
		list.add(new SelectItem("aline", "Aline2"));
		list.add(new SelectItem("aline", "Aline3"));
		list.add(new SelectItem("aline", "Aline4"));
		list.add(new SelectItem("vicente", "Vicente"));
		list.add(new SelectItem("vicente", "Vicente2"));
		list.add(new SelectItem("vicente", "Vicente3"));
		list.add(new SelectItem("vicente", "Vicente5"));
		list.add(new SelectItem("vicente", "Vicente6"));
		list.add(new SelectItem("juliano", "Juliano1"));
		list.add(new SelectItem("juliano", "Juliano"));
		list.add(new SelectItem("cabral", "Cabral"));
	}
	public List
 getList() {
		return list;
	}
	public void updateList(ValueChangeEvent evt) {
		String nv = (String) evt.getNewValue();
		getBaseList();
		if (nv != null && !"".equals(nv.trim())) {
			for (Iterator
 i = list.iterator(); i.hasNext();) {
				SelectItem s = i.next();
				if (!((String) s.getValue()).startsWith(nv))
					i.remove();
			}
		}
	}
}


toda vez que eu começo a digitar alguma coisa, o método public void updateList(ValueChangeEvent evt) é chamado, e faz a filtragem dos valores que devem ser mostrados como opção para o usuário, o ICEFaces traz a lista via ajax e mostra para o usuário mostrando algo parecido com isto:
autocomplete

que normalmente é um pé no saco de implementar, mas desta vez eu achei muuit fácil :D

DataTable com páginação via ajax

para fazer o data table com páginação, é praticamente o mesmo processo que quando se usa as tags do tomahawk, com a diferença que a páginação é feita via AJAX

criei uma classe para representar os dados que seriam mostrados na DataTable

public class DataObj {

	private final int i;

	private final String string;

	private final String string2;

	public DataObj(int i, String string, String string2) {
		this.i = i;
		this.string = string;
		this.string2 = string2;
	}

	public int getI() {
		return i;
	}

	public String getString() {
		return string;
	}

	public String getString2() {
		return string2;
	}

}

Adicionei uma propriedade no meu MBean que seria utilizada como valor para a DataTable:

	private List values;
	public List getValues() {
		if (this.values == null) {
			values = new ArrayList();
			for (int i = 0; i < 10000; i++) {
				values.add(new DataObj(i, "nome " + i, " qualquerTexto " + i));
			}
			System.out.println(new Date());
		}
		return values;
	}

	public Date getData() {
		return new Date();
	}


ou seja, uma propriedade que vai retornar 10000 itens “fake” para a lista, o System.out.println(new Date()); foi só para garantir que o método não era chamado toda hora, o a propriedade Data que foi criada é para imprimir uma data no formulário e tornar visivel que o request não é feito toda hora.
o código da JSF fica mais ou menos assim:

	
	
		
			
				
					
				
				
			
			
				
					
				
				
			
			
				
					
				
				
			
		
		
			
				
					
				
				
					
				
				
					
				
				
					
				
				
					
				
				
					
				
			
			
				
					
					
					
					
					
					
				
			
		
	

ou seja, praticamente o mesmo código utilizado para fazer a páginação com o tomahawk, mas com um resultado melhor funcionando via ajax :D
o código completo este neste zip, mas o zip não inclui as bibliotecas do icefaces, que foram configuradas automáticamente pelo plugin no eclipse.
Bom, acho que era isto, temos agora mais uma opção de componentes para JSF com suporte a AJAX, e isto esta ficando cada vez mais fácil de usar (estou pensando até em abandonar o ajax4jsf :) )

Se você gostou deste post, lembre-se de assinar o RSS feed do blog, para ser notificado de novos posts!

Tags: , , ,

Reader's Comments

  1. |

    PQP, me desculpe o palavrao ;-]
    mas achei isso pelo google, vc sempre me surpreendendo neh uruba…

    Muito bom Garoto!!! Adorei esse Post!!! e Exemplo!

    PARABENS!

    Bem que voce podia animar um tutorial / artigo de JSF com os componentes que voce mais usa e mais achou completo…
    Quem sabe ate uma uniao com o Spring para IOC e DI

    Reply to this comment
  2. |

    acho que sai sim :D ja fiz um parecido com isto montando uma loja virtual com spring spring-annotation hibernate jsf na frente da galera :D

    Reply to this comment
  3. |

    Muito bom Urubatan, parece ser bem mais fácil que o blueprints e o ajax4jsf mesmo.
    Mas no teste que eu fiz, o input não apareceu… sabe o motivo? utilizei exatamente o seu exemplo para testar… peguei também o fonte que você disponibilizou e nada adiantou…
    Estou utilizando o eclipse e foram reconhecidas as taglibs do ICEFaces também…

    Como proceder? Me mande um email, se possível, para tentar solucionar este meu caso.
    Obrigado e Bom final de semana!

    Reply to this comment
  4. |

    Urubatan aqui nao funcionou também…
    Uso o JBoss 4.0 e ja coloquei tudo do ICEFaces dentro do lib da pasta do JBoss. Porque li que ele ignora o que esta dentro do Lib do projeto.

    Reply to this comment
  5. |

    Consegui fazer funcionar.
    Mas o auto-complete noa funciona no IE nem no FX.
    A paginacao sim….

    Reply to this comment
  6. |

    extranho, aqui funcionou direto no tomcat :(

    Reply to this comment
  7. |

    Pode “zipar” seu .war e colocar para download?

    Reply to this comment
  8. |

    yeap, durante esta semana eu faço isto :D

    Reply to this comment
  9. |

    Bom dia, Urubatan

    Como o Alexandre Trindade disse, sua metodologia para a utilização do ajax em componentes JSF parece ser simples e eficaz. Porém estou passando pelo mesmo problema, ao utilizar a taglib do iceface o componente não fica visivel na tela (para nenhum componente usado) e creio eu que parece estar tudo normal.
    Agradeço desde já.
    Atenciosamente
    Vinícius cançado

    Reply to this comment
  10. |

    [...] Bom, eu retiro o que eu disse neste post. ICEFaces é um lixo!!! Escrevi aquele post maravilhado com a facilidade de utilizar o tal do [...]

    Reply to this comment
  11. |

    bom, atualizei o zip e escrevi outro post aqui sobre qual é o problema com este exemplo …
    agora é só baixar o zip que funciona, mas eu não recomendo mais a utilização do ICEFaces :(
    PS.: muito obrigado por me avisarem deste problema …

    Reply to this comment

Leave a Comment