SelectOnechoice's dependentes

Forum sobre a ferramenta Oracle JDeveloper, ADF, OAF, etc. (Não é destinado ao aprendeziado da Linguagem Java em geral)
Responder
Mick
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 69
Registrado em: Sex, 08 Fev 2008 11:20 am
Localização: São Paulo - SP

Olá pessoal....

Eu estou com o seguinte problema...

Eu tenho dois selectonechoices que esão dependentes, ou seja, assim que eu escolho um valor no primeiro selectonechoice, o segundo deve mostrar valores relacionado ao valor que eu escolhi no primeiro:

Selecionar tudo

<af:selectOneChoice label="Razão Social" 
                  binding="#{backing_Inscricao.razao_social}"
                   autoSubmit="true" id="razao"  partialTriggers="plano">
       <f:selectItems value="#{backing_Inscricao.tipos}"/>
</af:selectOneChoice>

<af:selectOneChoice label="Tipo de Plano"
                 binding="#{backing_Inscricao.plano}"
                 autoSubmit="true" partialTriggers="razao"   id="plano">
     <f:selectItems value="#{backing_Inscricao.planos}"/>
</af:selectOneChoice>
e o baking bean:

Selecionar tudo

public SelectItem[] getPlanos() {
            if(getRazao_social().getValue()!=null){
                 BindingContainer bindings = getBindings();
                 OperationBinding operationBinding = 
                               bindings.getOperationBinding("ExecuteWithParams4");                             operationBinding.getParamsMap().put("wcodigo_empresa",Integer.parseInt(getRazao_social().getValue().toString()) );    
                  Object result = operationBinding.execute();
                  if (!operationBinding.getErrors().isEmpty()) {
                             return null;
                    }
             }

            FacesContext fctx = FacesContext.getCurrentInstance();
            ValueBinding vbinding = fctx.getApplication().createValueBinding("#{bindings.Assoplanos_usuarioView1Iterator}");
            DCIteratorBinding locationsIterBinding = (DCIteratorBinding)vbinding.getValue(fctx);
            locationsIterBinding.executeQuery();
            locationsIterBinding.setRangeSize(-1);

           Row[] locRowsArray = locationsIterBinding.getAllRowsInRange();
           planos = new SelectItem[locRowsArray.length];

            for (int indx = 0; indx < locRowsArray.length; indx++) {
                SelectItem addItem = new SelectItem();
                addItem.setLabel((String)locRowsArray[indx].getAttribute("Descricao"));
                addItem.setValue(locRowsArray[indx].getAttribute("Codigo"));
               planos[indx] = addItem;
           }
           return planos;              
    }

public SelectItem[] getTipos() { 

            FacesContext fctx = FacesContext.getCurrentInstance();
            ValueBinding vbinding = fctx.getApplication().createValueBinding("#{bindings.Empresas_acessoView1Iterator}");
            DCIteratorBinding locationsIterBinding = DCIteratorBinding)vbinding.getValue(fctx);

            locationsIterBinding.executeQuery();
            locationsIterBinding.setRangeSize(-1);
            Row[] locRowsArray = locationsIterBinding.getAllRowsInRange();
            tipos = new SelectItem[locRowsArray.length];

            for (int indx = 0; indx < locRowsArray.length; indx++) {
                SelectItem addItem = new SelectItem();
                addItem.setLabel((String)locRowsArray[indx].getAttribute("Razsoc"));
                addItem.setValue(locRowsArray[indx].getAttribute("Codigo"));
                tipos[indx] = addItem;
            }
            return tipos;
    }
Ele está funcionando perfeitamente.. quando eu mudo o valor no primeiro selectonchoice o segundo é atualizado normalmente... mas quando eu escolho um valor no segundo selectonechoice, e depois tento mudar um valor no primeiro .. ele para de funcionar.... :cry:

Tentei colocar um getPlano().resetvalue().... pra limpar o segundo ... e estava funcionando bem... mas daí quando eu clico em um botão pra poder enviar os dados.. ele está resetando também e mandando o valor em branco!!!....
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Selecionar tudo

<af:selectOneChoice id="tipoCliente"
                                                        binding="#{manutencaoCompetenciaBean.tipoCliente}"
                                                        value="#{bindings.Brcategoriacliid1.inputValue}"
                                                        unselectedLabel=""
                                                        inlineStyle="width: 250px"
                                                        autoSubmit="true"
                                                        valueChangeListener="#{manutencaoCompetenciaBean.atualizaGarantia}">
                                        <af:forEach items="#{bindings.CategoriasClientesVO1.rangeSet}"
                                                    var="row">
                                            <af:selectItem value="#{row.Brcategoriacliid.sequenceNumber}"
                                                           label="#{row.Brdescricao}" id="itemBrcategoriacliid"/>
                                        </af:forEach>
                                    </af:selectOneChoice>
quando tenho q fazer isso eu uso o forEach para ter elementos e o metodo valueChangeLister junto do atributo partialTrigers...

em fim.. você temde ver onde você ta chamando esse resetValue pois ele deve estar sendo chamado na hora do submit do form

ou

implementar um valueChangeListener no segundo afim de limpar o primeiro em caso ddos valores serem diferentes

Selecionar tudo

    public void atualizaGarantia(ValueChangeEvent evt)
    {
    	Object valor = evt.getNewValue();
    	List<CoreSelectItem> listaValores = evt.getComponent().getChildren();
     }
atraves desse objeto evt que e passado por parametro você tem aceso aos dados do objeto

acho q seu problema pode ser resolvido com isso
Mick
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 69
Registrado em: Sex, 08 Fev 2008 11:20 am
Localização: São Paulo - SP

Muuuito obrigada mais uma vez Victor..!!!! :-o consegui resolver meu problema!!...

usei o valuechangelistener..... e tudo funcionou....

agora só uma dúvida.. quando você usa o foreach... como você faz pra definir o 'RangeSize'
... porque se o RangSize estiver diferente de -1, ele só vai mostrar 10 linhas não é?....
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

quando uso o foreache eu tenho que add o iterator do VO la no pageDef então eu coloco o rangeSize = -1 la mesmo no page def

qualquer coisa tamo ai
good luck
Mick
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 69
Registrado em: Sex, 08 Fev 2008 11:20 am
Localização: São Paulo - SP

Ahh está.. entendi!!! :)
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes