Autor |
Mensagem |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 21/06/2007 17:51:42
|
guilherme.pimentel
Template
![[Avatar]](/forum/images/avatar/1ff1de774005f8da13f42943881c655f.jpg)
Membro desde: 21/06/2007 15:52:28
Mensagens: 109
Localização: BELO HORIZONTE
Offline
|
Eu fiz uma tela de entrada que tem o combo1 que depende da seleção de outro combo que seria o combo2. Apos a seleção do item no combo2 o combo1 é carregado, porem quando eu edito o valor não é setado pois não foi selecionado nenhum item do combo2 logo não tem nenhum item no combo1 para que o FrameWork faça a seleção do item deacordo com o valor que esta no bean.
Em que momento eu posso setar o valor do combo2 para que os valores do combo1 sejam listados e o FrameWork possa fazer a seleção deacordo com o dado do bean.
Um exemplo desse problema:
Eu tenho 3 entidades Seção, Item e SubItem, para fazer o cadastro de SubItem eu preciso selecionar a Seção, o itens da seção aparecem em outro combo para que o item seja selecionado, como o a Seção não faz parte do SubItem ao editar o registro o combo referente ai item esta vazio pois nenhuma seção foi selecionada logo não existe nenhum item para ser exibido.
A pergunta é o seguinte onde eu coloco o codigo para que esses combos sejam preenchidos automaticamente??
|
GUILHERME A. MUNCK PIMENTEL
DESENVOLVEDOR JEE
BRASIL - MINAS GERAIS - BELO HORIZONTE |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 21/06/2007 18:57:32
|
pedro.goncalves
Equipe
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline
|
Guilherme, dentro do crud controller tem um método chamado carregar, sobrescreve ele e faça algo mais ou menos assim:
NomedoBean nomedobean= super.carregar(request,bean);
nomedobean.setAlgo1(nomedobean.getAlgo().getMaster());
return nomedobean;
Entendeu?
Posta o seu código ai que fica mais fácil.
[]'s
|
Pedro Gonçalves
http://pedrogoncalves.com.br
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 21/06/2007 19:49:01
|
rogel.garcia
Xiita
Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline
|
Uma outra forma de fazer isso é utilizar subpropriedades dos seus beans. Exemplo
Code:
class Principal {
SubItem subItem;
// getters e setters
}
class SubItem {
Item item;
//getters e setters
}
class Item {
Sessao sessao;
//getters e setters
}
class Sessao {
// getters e setters
}
Se você estiver fazendo a tela de Principal por exemplo voce pode utiizar
Code:
<n:comboReloadGroup useAjax="true">
<t:property name="subItem.item.sessao">
<t:property name="subItem.item">
<t:property name="subItem">
</n:comboReloadGroup>
Quando voce editar o principal todos os combos estarão carregados.
Nesse caso cada entidade tem que ser uma referencia para a outra (@ManyToOne) voce deve fazer DAOs para todas elas.
Sobrescreva o método updateEntradaQuery do PrincipalDAO para fazer join (fetch) com item e sessao (o NEO carrega os beans se eles não estiverem carregados do banco mas não é recomendável já que várias consultas ao banco seriam necessárias. Se performance não é um problema muito importante voce pode querer nao sobrescrever o updateEntradaQuery)
Na versão 3.3.14 você terá que verificar se o subItem possui id antes de salvar o principal. Isso porque se estiver selecionada uma Sessao voce terá um principal com um subItem que tem um Item que tem uma Sessao. Mas o subItem nao terá chave (id) se nenhum subItem tiver sido selecionado. O Hibernate soltará uma exceção TransientObjectException caso o subItem nao receba o tratamento necessário. Se o subItem for obrigatório não terá nenhum problema.
Na versão 3.3.15 se nenhum subItem tiver sido selecionado o subItem será nulo. Então não terá problemas com o Hibernate
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 22/06/2007 10:03:10
|
guilherme.pimentel
Template
![[Avatar]](/forum/images/avatar/1ff1de774005f8da13f42943881c655f.jpg)
Membro desde: 21/06/2007 15:52:28
Mensagens: 109
Localização: BELO HORIZONTE
Offline
|
Com essa segunda solução ficou perfeito. Gostaria de saber tambem se tem como eu mostrar ao lado de um subcombo que não foi encontrado nenhuma ocorrencia quando um item é selecionado no combo principal e não existe nenhum subitem para o selecionado.Tem jeito???
|
GUILHERME A. MUNCK PIMENTEL
DESENVOLVEDOR JEE
BRASIL - MINAS GERAIS - BELO HORIZONTE |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 22/06/2007 10:14:20
|
rogel.garcia
Xiita
Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline
|
Você pode fazer o seguinte:
Vamos supor o seguinte combo:
Code:
<t:property name="subItem.item">
Existe um evento Javascript que é disparado pelo combo ajax, quando os itens chegam do servidor, esse evento é o onLoadItens. O código ficaria assim:
Code:
<t:property name="subItem.item"
onLoadItens="if(this.options.length ==1){document.getElementById('infor').innerHTML = 'Nenhum item encontrado';} else {document.getElementById('infor').innerHTML =''}}">
Se estiver dentro de um panelGrid com 2 colunas e desejar que a mensagem fique ao lado do controller você deve fazer o seguinte código:
Code:
<n:panel>Item</n:panel>
<n:panel>
<t:property name="subItem.item" ....>
<span id="infor"></span>
</n:panel>
Todos os templates que são tabelas no NEO utilizam panelGrids. Então, se desejar que vários componentes fiquem no mesmo TD é só englobá-los numa tag n:panel
|
|
 |
|