No artigo anterior vimos o que é necessário para criar um componente, em termos de estrutura. Aqui veremos como funcionam e quais classes tem sua criação indicada e por que definimos os arquivos xml na primeira parte.
O ideal é criar 3 classes: Uma que representa a tag (definida na tld que criamos no artigo passado), uma que represente o componente em si e outra que realize a renderização do componente.
SeuComponenteTag.java -
Esta classe deve possuir todos os atributos especificados no arquivo de TLD, pois através desta classe serão atribuitos os valores informados pelo usuario (programador) ao componente. Como tudo é muito simples, desta vez, pouparei alguns comentários. Segue abaixo um exemplo:
public class SeuComponenteTag extends UIComponentTagBase{
// Aqui as propriedades que definimos no arquivo TLD
private String _id;
private String _value;
private String _styleClass;public void setId(String id) {
this._id = id;
}… todos os sets aqui, como está classe apenas atribui valores, nao precisamos dos gets.
// Esta informacao é utilizada pela classe de renderizacao
public String getComponentType(){
return “tipoDoComponente”; // o mesmo que definimos no META-INF/faces-config.xml
}// Esta informacao é utilizada pela classe de renderizacao
public String getRendererType(){
return “pacote.ClasseDoRenderizador”; // idem
}
// reseta os valores dos atributos
public void release(){
super.release();
_id = null;
_value = null;
_styleClass = null;
}
// Método que seta as propriedades no objeto componente
protected void setProperties(UIComponent component){
super.setProperties(component);FacesContext context = getFacesContext();
if (_id != null){
((SeuComponente)component).setId(_id);
}if (_value != null){
ValueBinding vb = context.getApplication().createValueBinding(_value);
component.setValueBinding(“valor”, vb);
}if (_styleClass != null){
((SeuComponente)component).setStyleClass(_styleClass);
}
}
Neste momento já temos um componente tomando forma, pois já definimos seus atributos e ele próprio nos arquivos xml da nossa biblioteca de componentes, já definimos como serão atribuídos os valores especificados pelo usuário ao componente.
Precisamos agora criar o componente em si e a classe que o renderiza.
No próximo artigo, descreverei como criar estas classes.
Até a próxima.
[...] Parte 2 Parte 3 [...]