combos anihados urgente
Tenho combos aninhados quando eu clico em alterar ele acaba acionando o evento do combo1 e listando no combo2 todas as empresas que estão relacionadas ao combo1. Até aí esta blz o problema é quando eu vou alterar o registro pois ao clicar ele aciona o combo1 e por conseguencia o combo2, não posicionando no combo2 o registro salvo no banco, mas eu não queo eu preciso que posicione na empresa que esta inserida. tentei fazer isto mas eu não consigo comparar
public List<SelectItem> getPoloEmpresaSelect() {
if (this.codigoPolo > 0){
if(this.acidenteSelecionado.getPolo().getCodigoPolo() != null){
this.poloEmpresaSelect = new ArrayList<SelectItem>();
List<Empresa> empresa = (List<Empresa>) this.acidenteSelecionado.getPolo().getEmpresaList();
SelectItem item = null;
for (Empresa emp : empresa ){
item = new SelectItem(emp,emp.getNomeFantasia());
item.setEscape(false);
this.poloEmpresaSelect.add(item);
}
// aqui eu tento posicionar o segundo combo de acordo com que foi inserido na tabela, mas não deu.
if(this.codigoEmpresa != 0){
for(SelectItem itens : this.poloEmpresaSelect){
System.out.println(valor da empresa = + itens.getValue().toString());
if (itens.getValue().equals(this.acidenteSelecionado.getEmpresa().getCodigoEmpresa().toString())){
break;
}
}
}
}
}
this.codigoPolo++;
return this.poloEmpresaSelect;
}
public List<SelectItem> getPoloEmpresaSelect() {
if (this.codigoPolo > 0){
if(this.acidenteSelecionado.getPolo().getCodigoPolo() != null){
this.poloEmpresaSelect = new ArrayList<SelectItem>();
List<Empresa> empresa = (List<Empresa>) this.acidenteSelecionado.getPolo().getEmpresaList();
SelectItem item = null;
for (Empresa emp : empresa ){
item = new SelectItem(emp,emp.getNomeFantasia());
item.setEscape(false);
this.poloEmpresaSelect.add(item);
}
// aqui eu tento posicionar o segundo combo de acordo com que foi inserido na tabela, mas não deu.
if(this.codigoEmpresa != 0){
for(SelectItem itens : this.poloEmpresaSelect){
System.out.println(valor da empresa = + itens.getValue().toString());
if (itens.getValue().equals(this.acidenteSelecionado.getEmpresa().getCodigoEmpresa().toString())){
break;
}
}
}
}
}
this.codigoPolo++;
return this.poloEmpresaSelect;
}
Jose Boas
Curtidas 0
Respostas
Davi Costa
09/04/2012
Será necessário tb alterar o get que traz a segunda combo, para caso tiver o atributo da primeira combo preenchida ele trazer os itens dependentes.
att Davi
att Davi
GOSTEI 0
Jose Boas
09/04/2012
Na inclusão está legal, eu selecione o combo1 e o combo2 é alimentado, o problema e quando eu vou alterar, quando clico para alterar, o primeiro combo é posicionado na opção que eu gravei no banco , mas o segundo não, nesse caso pelo que eu vi ele executa novamente o evento do combo1. O que eu tentei fazer, logo depois dele executar é fazer um for no selectitem e quando achar o valor dar u break mas eu não consigo comparar o valor do selectitem com o da classe selecionada no alterar.
GOSTEI 0
Jose Boas
09/04/2012
Eu até consegui entrar onde eu queria mas não consigo ainda posicionar o segundo grid quando eu for alterar.
for(SelectItem itens : this.poloEmpresaSelect){
//while (it.hasNext()){
//SelectItem itens = it.next();
System.out.println(valor da empresa = + this.acidenteSelecionado.getEmpresa().getCodigoEmpresa());
System.out.println(valor da real = + itens.getLabel()) ;
//if (this.acidenteSelecionado.getEmpresa().getCodigoEmpresa().equals(itens.getValue())) {
if (itens.getLabel().equals(this.acidenteSelecionado.getEmpresa().getNomeFantasia())) {
System.out.println(entrei = + itens.getLabel());
break;
}
}
}
for(SelectItem itens : this.poloEmpresaSelect){
//while (it.hasNext()){
//SelectItem itens = it.next();
System.out.println(valor da empresa = + this.acidenteSelecionado.getEmpresa().getCodigoEmpresa());
System.out.println(valor da real = + itens.getLabel()) ;
//if (this.acidenteSelecionado.getEmpresa().getCodigoEmpresa().equals(itens.getValue())) {
if (itens.getLabel().equals(this.acidenteSelecionado.getEmpresa().getNomeFantasia())) {
System.out.println(entrei = + itens.getLabel());
break;
}
}
}
GOSTEI 0
Davi Costa
09/04/2012
n vi em nenhum momento nesse trecho de codigo vc listar o itens da segunda combo conforme a primeira,
é bem simples, vc verifica se o pai tá diferente de nulo se tiver vc altera os valores da segunda combo conforme o pai, só isso
att Davi
é bem simples, vc verifica se o pai tá diferente de nulo se tiver vc altera os valores da segunda combo conforme o pai, só isso
att Davi
GOSTEI 0
Jose Boas
09/04/2012
Neste método não esta mesmo,esta opção eu ja fiz,o problema esta quando eu clica em alterar, onde ele vai jogar para a edicação o dados do banco.PO exemplo quando eu clico em alterar todos os combos são atualizados com os dados que estão no banco já gravados mas o segundo combo não recebe o valor que esta gravado banco, pelo fato daquele esquema de aninhamento.
Ex: Eu tenho no primeiro combo polo1 com a empresa1 e empresa2 e o segundo polo no caso polo2 com a empresa1.
Quando eu clico e eslecione o polo1 é listado no segundo combp a empresa1 e empresa2 . Caso eu selecione o polo2
ei selecione a empresa1. Até aí esta ok, o problrem ´r quando eu vou editar os dados ond todo os combos são atualizados com seus valores gravados no banco, mas o combo da empresa não são;
veja como esta o xhtml.
<p:selectOneMenu id=polo value=#{planilhaBean.acidenteSelecionado.polo} style=width:180px>
<f:selectItem itemLabel=Selecione o Polo itemValue=/>
<f:selectItems value=#{poloBean.poloSelect}/>
<p:ajax onchange=submit() update=empresa actionListener=#{planilhaBean.trocaEmpresaPolo} />
</p:selectOneMenu>
<p:selectOneMenu id=empresa value=#{planilhaBean.acidenteSelecionado.empresa} style=width:180px>
<f:selectItem itemLabel=Selecione a Empresa itemValue=/>
<f:selectItems value=#{planilhaBean.poloEmpresaSelect} var=emp itemLabel=#{emp.nomeFantasia} itemValue=#{emp.codigoEmpresa}/>
</p:selectOneMenu>
Ex: Eu tenho no primeiro combo polo1 com a empresa1 e empresa2 e o segundo polo no caso polo2 com a empresa1.
Quando eu clico e eslecione o polo1 é listado no segundo combp a empresa1 e empresa2 . Caso eu selecione o polo2
ei selecione a empresa1. Até aí esta ok, o problrem ´r quando eu vou editar os dados ond todo os combos são atualizados com seus valores gravados no banco, mas o combo da empresa não são;
veja como esta o xhtml.
<p:selectOneMenu id=polo value=#{planilhaBean.acidenteSelecionado.polo} style=width:180px>
<f:selectItem itemLabel=Selecione o Polo itemValue=/>
<f:selectItems value=#{poloBean.poloSelect}/>
<p:ajax onchange=submit() update=empresa actionListener=#{planilhaBean.trocaEmpresaPolo} />
</p:selectOneMenu>
<p:selectOneMenu id=empresa value=#{planilhaBean.acidenteSelecionado.empresa} style=width:180px>
<f:selectItem itemLabel=Selecione a Empresa itemValue=/>
<f:selectItems value=#{planilhaBean.poloEmpresaSelect} var=emp itemLabel=#{emp.nomeFantasia} itemValue=#{emp.codigoEmpresa}/>
</p:selectOneMenu>
GOSTEI 0
Jose Boas
09/04/2012
Deixa eu explicar melhor. Eu tenho uma tabela acidente, onde nesta tabela eu gravo o polo(combo1) e a empresa relacionada a este polo(combo2). Quando eu estou incluindo blz funcina normal o problema é quando eu vou editar, pois eu tenho um datatable que lista estes dados ao clicar na opção de edição o primeiro combo á atualizado com o respectivo polo gravado no banco mas o segundo combo onde era para posicionar na empresa que está gravado, não fica. E eu utilixo o ViewScopo, pois senão terai como fazer isso.
GOSTEI 0
Jose Boas
09/04/2012
Eu fiz um teste agora, coloquei um inputtext do lado co segundo combo(empresa) e este input é preenchico com o codigo ou o nome da empresa(testei com as duas propriedades) que esta gravada na tabela de acidente, mas o combo não ficou posicinado talvez porque ele executa o método para mudar de empresa ao clicar no botão botão editar.
GOSTEI 0
Jose Boas
09/04/2012
Consegui resolver de um outro jeito mas deu certo. Deixa eu falar como fiz.
Ei criei uma propriedade chamada codigoEmpresa onde eu utilizao para renderizar os controles. De inicio ela vale 0 então habilito o combo e desabilito o inputtext.Quando eu clico em alterar(caso queira alterar a empresa, que ja esta listada de acordo com o polo) eu desabilito o combo e habilito o inputtext, aí eu consigo jogar o valor, mas ao habiliat o inputtext eu habilito junto um commandtlink que diz editar empresa e ao clicar eu atualizo novamente a variavel voltando para o combo e altera caso seja necessário.
Vaje o codigo do bean
public void atualizaVariavelr(){
this.codigoEmpresa = 0;
}
xhtml que muda os controles
<h:outputLabel rendered=#{planilhaBean.codigoEmpresa == 0} value=Empresa for=empresa/>
<p:commandLink rendered=#{planilhaBean.codigoEmpresa == 1} value=Editar Empresa actionListener=#{planilhaBean.atualizaVariavelr} title=Editar Empresa ajax=false>
<p:ajax event=click update=gempresa1 gempresa2 process=@this/>
</p:commandLink>
agora os controles que serão mudados
<h:panelGroup id=gempresa1 rendered=#{planilhaBean.codigoEmpresa==0}>
<p:selectOneMenu id=empresa value=#{planilhaBean.acidenteSelecionado.empresa} style=width:180px>
<f:selectItem itemLabel=Selecione a Empresa itemValue=/>
<f:selectItems value=#{planilhaBean.poloEmpresaSelect} var=emp itemLabel=#{emp.nomeFantasia} itemValue=#{emp.codigoEmpresa}/>
</p:selectOneMenu>
</h:panelGroup>
<h:panelGroup id=gempresa2 rendered=#{planilhaBean.codigoEmpresa==1}>
<p:inputText readonly=true id=empresa1 value=#{planilhaBean.acidenteSelecionado.empresa.nomeFantasia} maxlength=10 style=width:200/>
</h:panelGroup>
Ei criei uma propriedade chamada codigoEmpresa onde eu utilizao para renderizar os controles. De inicio ela vale 0 então habilito o combo e desabilito o inputtext.Quando eu clico em alterar(caso queira alterar a empresa, que ja esta listada de acordo com o polo) eu desabilito o combo e habilito o inputtext, aí eu consigo jogar o valor, mas ao habiliat o inputtext eu habilito junto um commandtlink que diz editar empresa e ao clicar eu atualizo novamente a variavel voltando para o combo e altera caso seja necessário.
Vaje o codigo do bean
public void atualizaVariavelr(){
this.codigoEmpresa = 0;
}
xhtml que muda os controles
<h:outputLabel rendered=#{planilhaBean.codigoEmpresa == 0} value=Empresa for=empresa/>
<p:commandLink rendered=#{planilhaBean.codigoEmpresa == 1} value=Editar Empresa actionListener=#{planilhaBean.atualizaVariavelr} title=Editar Empresa ajax=false>
<p:ajax event=click update=gempresa1 gempresa2 process=@this/>
</p:commandLink>
agora os controles que serão mudados
<h:panelGroup id=gempresa1 rendered=#{planilhaBean.codigoEmpresa==0}>
<p:selectOneMenu id=empresa value=#{planilhaBean.acidenteSelecionado.empresa} style=width:180px>
<f:selectItem itemLabel=Selecione a Empresa itemValue=/>
<f:selectItems value=#{planilhaBean.poloEmpresaSelect} var=emp itemLabel=#{emp.nomeFantasia} itemValue=#{emp.codigoEmpresa}/>
</p:selectOneMenu>
</h:panelGroup>
<h:panelGroup id=gempresa2 rendered=#{planilhaBean.codigoEmpresa==1}>
<p:inputText readonly=true id=empresa1 value=#{planilhaBean.acidenteSelecionado.empresa.nomeFantasia} maxlength=10 style=width:200/>
</h:panelGroup>
GOSTEI 0
Dyego Carmo
09/04/2012
Legal !
Este seu alinhamento pode ter tmb carga dinamica utilizando ajax caso queira usar JSF 2 :)
Este seu alinhamento pode ter tmb carga dinamica utilizando ajax caso queira usar JSF 2 :)
GOSTEI 0
Paulo Vinck
09/04/2012
Olá José,
Tive problemas com isso também, então pesquisando por ai achei este exemplo.
http://serjaum.wordpress.com/2009/08/28/jsf-tutorial-combos-aninhados-estadoscidades/
a partir deste consegui resolver meus problemas...
Tive problemas com isso também, então pesquisando por ai achei este exemplo.
http://serjaum.wordpress.com/2009/08/28/jsf-tutorial-combos-aninhados-estadoscidades/
a partir deste consegui resolver meus problemas...
GOSTEI 0