ValueChangeListener

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

eu havia feito a seguinte pergunta:

como eu faço pra selecionar um item num listbox e assim que eu seleciona-lo executar uma ação?... sem precisar apertar um botão?.... eu tentei usar a propriedade 'onclick'... mas ele não funciona... eu queria saber também como fazer isso em um 'adf read only table'... assim que o usuário selecionasse uma linha .. eu queria que já executasse uma ação... mas na propriedade 'onclick' dele não está executando a ação....

E então o Victor me falou que eu deveria seguir os seguintes passos:

você precisa mecher em 2 atributos do seu componente
1 - autoSubmit = "true"
2 - valueChangeListener="#{nomeDoBean.nomeDoMetodo}"

Mas eu fiz esses dois passos... no valuechangelistener eu chamei o mesmo método que o botão chamava....
e toda vez que eu selecionava o item .. ele não fazia nada... era como se eu estivesse atualizando a tela ao clicar nele.. mas ele não executava a ação que eu queria que ele executasse....
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

eu entendi que era para um af:selectOneChoice
posta o codigo do componente e tambem o metodo q é chamado
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

selecionar o item q você fala é clicar no radion button ??

acho muito dificil você conseguir fazer isso...
so clicando mesmo... no registro diretamente ou selecionando o radionButton e clicando em abrir
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

Bom... eu tentei fazer pra um selectonechoice também... mas não fucionou também...

vo posta o código do selectonechoice....

jsp

Selecionar tudo

       <af:panelForm rows="1">
            <af:selectOneChoice value="#{bindings.wplaca.inputValue}"
                                label="Selecione a O.S. do Transporte"
                                autoSubmit="true"
                                valueChangeListener="#{backing_Montagem_transporte.Pesquisar_action}">
              <f:selectItems value="#{bindings.wplaca.items}"/>
            </af:selectOneChoice>

Selecionar tudo


    public String Pesquisar_action() {
        BindingContainer bindings = getBindings();
        OperationBinding operationBinding =
            bindings.getOperationBinding("ExecuteWithParams1");
        Object result = operationBinding.execute();
        if (!operationBinding.getErrors().isEmpty()) {
            return null;
        }
        return null;
    }
No componente 'tableselectone', que é onde se seleciona e uma table não tem a propriedade valuechangelistener!!
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

:D

seguinte...

apague seu metodo do bean e dai nessa linha la no teu jsp deve acusar um erro, dai click na lampada vermelha a sua esquerda na direção da linha

Selecionar tudo

valueChangeListener="#{backing_Montagem_transporte.Pesquisar_action}">
crie o metodo atraves da lampada vermelha dai e so preencher com o que você já fez... o metodo deve receber este parametro 'ValueChangeEvent'
ficando assim

Selecionar tudo

public String pesquisarAction (ValueChangeEvent valueChangeEvent) { 
        BindingContainer bindings = getBindings(); 
        OperationBinding operationBinding = 
            bindings.getOperationBinding("ExecuteWithParams1"); 
        Object result = operationBinding.execute(); 
        if (!operationBinding.getErrors().isEmpty()) { 
            return null; 
        } 
        return null; 
    } 
obs.: atraves do objeto 'valueChangeEvent' que você recebe por parametro, e possivel pegar o valor selecionado na combo por exemplo

Selecionar tudo

String valorSelecionado = valueChangeEvent.getValue();
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

Olha Victor...

eu fiz exatamente do jeito que você falou... mas deu na mesma... ele faz como se tivesse atualizando a página... mas não executa a ação....!!

Eu até criei um outro método na propriedade Valuechangelistener... e aí então coloquei o código... mas não deu em nada!!..
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Michele

como todo bom piscicopata vamos por partes ...

"ele faz como se tivesse atualizando a página"
isso é o partial rendered ... isso se da por causa do autoSubmit='true'
coloque um break point dentro do seu método que tenho certeza absoluta que ele entrará no seu metodo.. o que esta ocorrendo e que seu metodo esta com problemas

ExecuteWithParams1
coloque um breakpoint nesse metodo tambem

em fim o seu problema e seu codigo o que te passei ta funcionando
qualquer coisa posta tudo ai q agente vê o q faz
:wink:
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

Bom.. eu coloquei um breakpoint no meu bean.. e ele passou por lá...

vou postar o meu código:

Selecionar tudo

<af:selectOneChoice value="#{bindings.wplaca.inputValue}"
                                label="Selecione a O.S. do Transporte"
                                autoSubmit="true"
                                valueChangeListener="#{backing_Montagem_transporte.Pesquisar}">
              <f:selectItems value="#{bindings.wplaca.items}"/>
            </af:selectOneChoice>

Selecionar tudo

    public void Pesquisar(ValueChangeEvent valueChangeEvent) {
        // Add event code here...
         BindingContainer bindings = getBindings();
         OperationBinding operationBinding =bindings.getOperationBinding("ExecuteWithParams1");
         Object result = operationBinding.execute();

    }
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

então ...
como eu havia dito

o problema e de logia sua
se ta entrando no metodo e porque você já entendeu como faz, agora falta você dar mais uma olhada na sua logica para acertar ela pois o problem e que seu metodo não faz o que você acha que ele tinha q fazer

:D
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

mas quando eu chamo o método pelo botão... ele executa certinho... ele me retorna a pesquisa ....

a única coisa que eu fiz de diferente é chamar esse método no valuechangelistener....

tem certeza.. q eu não preciso acertar mais nenhum atributo?!!
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

quem retorna certinho quando você chama de outra forma ...
o metodo do AM ou do bean ??

acho q sei o seu problema

Selecionar tudo

Object result = operationBinding.execute(); 
faça assim

Selecionar tudo

operationBinding.execute(); 
Object result = operationBinding.getResult();
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

Eu fiz essa mudança... mas não adiantou!! :cry:

É o seguinte .. eu tenho um commandbutton:

Selecionar tudo

<af:commandButton text="Pesquisar"
                              disabled="#{!bindings.ExecuteWithParams1.enabled}"
                              action="#{backing_Montagem_transporte.Pesquisa}"/>

Selecionar tudo

    public String Pesquisa() {
        BindingContainer bindings = getBindings();
        OperationBinding operationBinding =
            bindings.getOperationBinding("ExecuteWithParams1");
        Object result = operationBinding.execute();
        if (!operationBinding.getErrors().isEmpty()) {
            return null;
        }
       return null;
    }
O que eu quero é que ele faça a pesquisa só com a mudança do meu selectonechoice.. sem eu precisar ter que clicar no notão pesquisar....
Quando eu clico no botão pesquisar ele funciona diretinho....

Código do selectonechoice:

Selecionar tudo

<af:selectOneChoice value="#{bindings.wplaca1.inputValue}"
                                label="Placa"
                                valueChangeListener="#{backing_Montagem_transporte.pesquisar_solicitacao}"
                                autoSubmit="true">
              <f:selectItems value="#{bindings.wplaca1.items}"/>
            </af:selectOneChoice>

Selecionar tudo

    public String pesquisar_solicitacao(ValueChangeEvent valueChangeEvent) {
        // Add event code here...
         BindingContainer bindings = getBindings();
         OperationBinding operationBinding =
             bindings.getOperationBinding("ExecuteWithParams1");
         operationBinding.execute();
        Object result = operationBinding.getResult();
         if (!operationBinding.getErrors().isEmpty()) {
             return null;
         }
         return null;
    }
Eu uso esse mesmo "Executewithparams1" para os dois casos... mas no selectonechoice.. ele não está mostrando a pesquisa...
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

oh michele
eu to tendo muita dificuldade para entender as suas duvidas sempre
separe melhor os assuntos, crie novos topicos, separe melhor suas duvidas, sei que não e facil quando se esta começando mas estou falando apenas para que eu possa te ajudar da melhor forma

vamos la..
so fazer a pesquisa com o selectOne já esta tudo implementado...

agora se você quer atualizar outro componente que sera alimentado com a sua pesquisa... ai falta..

no seu componente que tem o valueChangeListener você vai acrescentar
partialTriggers="idOutroComponente"

e no componente que será atualizado você vai colocar
id="idOutroComponente"
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

Desculpa... vou tentar esclarecer melhor minhas dúvidas!! :wink: hehe...

... é q inicialmente a dúvida era uma.. e assim que você vai respondendo .. você vai solucionando a dúvida.. e outras vão aparecendo... mas vou fazer o possível, pra separar as coisas...

Bom.. eu fiz isso que você me passou.. só que ao contrário o partialTrigger no componente que vai ser atualizado .. porque da forma que você me passou não funcionou...

Agora ele está fazendo a pesquisa .. mas atrasado... deixa eu explicar:

o selectonechoice incialmente não tem valor nenhum... quando eu mudo o valor dele a primeira vez.. nada acontece.. já quando eu mudo a segunda vez.. ele faz a pesquisa com o valor anterior... e assim sucessivamente.. ele está sempre fazendo a pesquisa com o valor que foi selecionado antes...
não sei se fui clara!!...

Vou passar o código:

Selecionar tudo

<af:selectOneChoice value="#{bindings.wplaca1.inputValue}"
                                label="Placa"
                                valueChangeListener="#{backing_Montagem_transporte.pesquisar_solicitacao}"
                                autoSubmit="true" id="placa_pesquisa">
              <f:selectItems value="#{bindings.wplaca1.items}"/>
            </af:selectOneChoice>

Selecionar tudo

    public String pesquisar_solicitacao(ValueChangeEvent valueChangeEvent) {
        // Add event code here...
         BindingContainer bindings = getBindings();
         OperationBinding operationBinding =
             bindings.getOperationBinding("ExecuteWithParams1");
         operationBinding.execute();
        Object result = operationBinding.getResult();
         if (!operationBinding.getErrors().isEmpty()) {
             return null;
         }
         return null;
Código de um dos componentes que vai receber a pesquisa:

Selecionar tudo

<af:panelLabelAndMessage label="Peso"
                                               partialTriggers="placa_pesquisa">
                        <af:outputText value="#{bindings.FrotaSolicitacaoView1Peso.inputValue}"
                                       inlineStyle="font-weight:bold;"/>
                      </af:panelLabelAndMessage>
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

eu me atrapalhei nos componentes en... que bom q você consegui solucionar
ta ficando fera hein..

entendi o que você esta relantando.... nunca vi isso não :roll:

deixa eu ver o seu 'ExecuteWithParams1'.. posta ele ai

uma solução logo de cara
e você pegar o metodo que e chamado la no teu AM e fazer com q ele receba o parametro direto da combo
como?!?!

Selecionar tudo

Map params = operationBinding.getParamsMap();
params.put("nomeParam", (String)valueChangeEvent.getNewValue()); 
nomeParam = ao nome que você da ao parametro no seu metodo AM
esse cara sempre terá o novo valor alterado na combo

se o seu metodo no AM ainda não recebe um parametro
você tem de tirar ele do page definition do su jsp e tambem tirar do client interface do teu AM.. dai coloque o param lá, compile e faça tudo de novo acrescente no cliente interface e no page definition
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

hehe.. desculpa a minha ignorância... mas eu não entendi muito bem;;;

mas se o 'executewithparams' não é um método que eu criei ... onde fica o código dele... você diz o do pagedefinition?:

Selecionar tudo

<action id="ExecuteWithParams1" IterBinding="FrotaSolicitacaoView1Iterator"
            InstanceName="AppModuleDataControl.FrotaSolicitacaoView1"
            DataControl="AppModuleDataControl" RequiresUpdateModel="true"
            Action="95">
      <NamedData NDName="wplaca" NDType="java.lang.String"
                 NDValue="${bindings.FrotaSolicitacaoView1_wplaca}"/>
    </action>
Esse código que você passo eu coloco aonde ?... no bean?...
Então o "nomeParam" que você diz... seria o meu "wplaca".. como mostra o código aí em cima?..
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

sim... o código e no bean ficando assim...

Selecionar tudo

    public String pesquisar_solicitacao(ValueChangeEvent valueChangeEvent) { 
         BindingContainer bindings = getBindings(); 
         OperationBinding operationBinding = 
         bindings.getOperationBinding("ExecuteWithParams1"); 
 	 Map params = operationBinding.getParamsMap(); 
         params.put("wplaca", (String)valueChangeEvent.getNewValue()); 	
         operationBinding.execute(); 
         Object result = operationBinding.getResult(); 
         if (!operationBinding.getErrors().isEmpty()) { 
             return null; 
         } 
         return null; 

e no page definition acho eu que tera de tirar o param 'NDValue'
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

Oi Victor... eu acho que o meu ValueChangeEvent.. está com algum problema.. porque quando eu travei pra um valor fixo ele funciounou normal... a pesquisa...:

Selecionar tudo

params.put("wplaca", "AAA1231"); 
Mas quando eu coloquei assim:

Selecionar tudo

params.put("wplaca", (String)valueChangeEvent.getNewValue()); 
ele não fez nada...

* .. ahh.. e eu tirei o NDValue... do pagedefinition..
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

está errado sim... a assinatura do método

tem de ser de retorno void e não String

agora vai funcionar :lol:
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

:(

Não funciono... agora simplesmente ele não mostra valor nenhum!!...
:!:
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

o troço é lindo mas existe alguns bugs :lol:

faz o processo novamente... apaga tudo e começa de novo

se não funcionar tente fazer um use case so pra testar a funcionalidade

vê o que você consegue ai e me de noticias
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

hehe...

vou tentar... se eu tiver algum progresso ;;.. eu posto!!
Responder
  • Informação
  • Quem está online

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