Componente BandBoxBind
Introdução
Esta seção visa explicar como utilizar o componente bandboxbind do Framework Prodígio.
Requisitos: Possuir as classes de domínio já modeladas e página .zul já configurada.
Listando valores com bandboxbind utilizando Enum
Basta criar o componente bandboxbind em sua página .zul da seguinte maneira:
<bandboxbind id="nomeDoEnumNaClasseDominio"/>
Vinculando objetos ao bandboxbind
Crie o componente bandboxbind e adicione os seguintes atributos substituindo o valor de nomeDoObjeto pelo valor correspondente ao que deseja vincular:
<bandboxbind nomeDoObjeto="classecontrole.objetoAtual. nomeDoObjetoNaClasseDominio"/>
Podemos também adicionar o atributo labelValorList que define como os valores serão listados no bandboxbind:
<bandboxbind nomeDoObjeto="classecontrole.objetoAtual. nomeDoObjetooNaClasseControle" labelValorList=”NomeDoAtributo:atributoDaClasse”/>
Utilizando a anotação @Lookup na classe de domínio obtemos uma atualização automática dos dados do bandboxbind quando algum objeto for adicionado, excluído ou modificado.
Aninhando bandboxbind
Usaremos como exemplo o vínculo de três objetos: País, Estado e Cidade. Onde País possuí um HashSet de Estados que possuí um HashSet de Cidades.
Crie os componentes bandboxbind seguindo a seguinte estrutura:
/* restante do código da página .zul */
<label value="País:"></ label>
<bandboxbind nomeDoObjeto="classecontrole.objetoAtual.paisVO" identificador="pais"/>
<label value="Estado:"></label>
<bandboxbind nomeDoObjeto="classecontrole.objetoAtual.estadoVO" identificador="estado" metodoFiltro="filtrarEstado" dependeDoComponente="pais"/>
<label value="Cidade:"></label>
<bandboxbind nomeDoObjeto="classecontrole.objetoAtual.cidadeVO" metodoFiltro="filtrarCidade" dependeDoComponente="estado"/>
/* restante do código da página .zul */
Observe bem os atributos identificador, dependenteDoComponente e metodoFiltro eles são cruciais para o funcionamento do vínculo.
Agora precisamos criar os filtros para os componentes. Abra a classe de controle de sua página .zul definida no atributo apply e crie os seguintes métodos seguindo a nomenclatura definida no atributo metodoFiltro de seus componentes:
/*Os métodos filtram e retornam as listas com os objetos que irão preencher os bandboxbind dependidos*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public List filtrarEstado(Bandboxbind bandboxbind){
/*Recupera o COMPONENTE dependido, logo será recuperado o componente com o identificador que seja igual ao valor do atributo dependenteDoComponente do bandboxbind que possuir este método(filtrarEstado) como metodoFiltro*/
Bandboxbind componentDependido = (Bandboxbind)ProHelperView.recuperaBandboxParaAninhar(getWindowAtual(), bandboxbind.getDependeDoComponente());
/*Recupera o OBJETO selecionado no COMPONENTE dependido*/
PaisVO paisVO = (PaisVO) componentDependido.getObject();
/*Recupera e retorna a lista de objetos DEPENDENTES do objeto DEPENDIDO ( no caso a lista de Estados de determinado País )*/
List estados = new ArrayList();
estados.addAll(paisVO.getEstados());
return estados;
}
/*Da mesma forma do código anterior filtra e retorna a lista de objetos, no caso a lista de Cidades de determinado Estado*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public List filtrarCidade(Bandboxbind bandboxbind){
Bandboxbind componentDependido = (Bandboxbind)ProHelperView.recuperaBandboxParaAninhar(getWindowAtual(), bandboxbind.getDependeDoComponente());
EstadoVO estadoVO = (EstadoVO)componentDependido.getObject();
List cidades = new ArrayList();
cidades.addAll(estadoVO.getCidades());
return cidades;
}
/* Como queremos listar a princípio todos os países, não usaremos filtro para País */