Duas actions em um mesmo botão

447 views
Skip to first unread message

Rafaell Pinheiro

unread,
Jul 8, 2009, 6:42:40 AM7/8/09
to javasf: JavaServer Faces International Group
Pessoal, tenho uma solução genérica aqui e gostaria de após o
processamento de uma actionX, que uma actionY fosse invocada. Pensei
em criar uma action e um actionListener para o botão, mas nao sei se
funciona, ja testaram? Preciso de invocação sequencial.... Como a
solução é dinamica, nao posso fazer um método X do meu bean invocar um
método Y, a não ser que use reflexão.

A solução mais simples seria criar dinamicamente duas actions para um
mesmo botão, isso é possível? Se sim, alguém tem o código de criação
de um actionListener?

abs

Rafaell Pinheiro

Tiago Augusto Nogueira Coelho

unread,
Jul 8, 2009, 7:34:15 AM7/8/09
to jav...@googlegroups.com
Você pode registrar dois ActionListener para o seu botão, mas não sei
sobre a ordem deles, se iriam respeitar a ordem da declaração.

Bruno Maomeh

unread,
Jul 8, 2009, 7:52:42 AM7/8/09
to jav...@googlegroups.com
"Pensei em criar uma action e um actionListener para o botão, mas nao sei se funciona, ja testaram?"
cara.. isso é uma coisa tão simples de ser testada.. pq vc mesmo não testa? :)

e por qual real motivo vc precisa dessas 2 chamadas?

2009/7/8 Tiago Augusto Nogueira Coelho <tiagoa...@gmail.com>

Rogerio Pereira

unread,
Jul 8, 2009, 8:15:32 AM7/8/09
to jav...@googlegroups.com
Já fiz isso, mas foi com richfaces/ajax4jsf.

2009/7/8 Bruno Maomeh <bruno...@gmail.com>



--
Regards,

Rogério (_rogerio_)

[Blog: http://faces.eti.br] [Twitter: http://twitter.com/ararog]  [LinkedIn: http://www.linkedin.com/in/rogerioaraujo]

"Faça a diferença! Ajude o seu país a crescer, não retenha conhecimento, distribua e aprenda mais."
(http://faces.eti.br/2006/10/30/conhecimento-e-amadurecimento)

Daniel Camargo

unread,
Jul 8, 2009, 8:23:47 AM7/8/09
to jav...@googlegroups.com
vc pode definir, sem problemas, uma action e uma actionListener para o mesmo commandButton.

O actionListener é sempre chamado primeiro no ciclo de vida do JSF.

o método para o actionListener precisa retornar void e receber como parametro um javax.faces.event.ActionEvent.

Vai na fé!

2009/7/8 Rogerio Pereira <rogerio...@gmail.com>

Rafaell Pinheiro

unread,
Jul 8, 2009, 8:59:40 AM7/8/09
to javasf: JavaServer Faces International Group
@Bruno, perguntei se ja testaram pq nao consegui criar
programaticamente um actionListener para um botao. Consigo criar uma
ActionExpression sem problemas (seria meu action), mas na hora de
criar o ActionListener nao estou sabendo como fazer ja que as maneiras
que eu enxergava como viaveis (MethodBinding) são deprecated.

Bom saber que criar setar as duas ações.... aqui fica a duvida: como
setar um actionListener a um HtmlCommandButton via código?

abs

Rafaell

On 8 jul, 09:23, Daniel Camargo <danielsu...@gmail.com> wrote:
> vc pode definir, sem problemas, uma action e uma actionListener para o mesmo
> commandButton.
>
> O actionListener é sempre chamado primeiro no ciclo de vida do JSF.
>
> o método para o actionListener precisa retornar void e receber como
> parametro um javax.faces.event.ActionEvent.
>
> Vai na fé!
>
> 2009/7/8 Rogerio Pereira <rogerio.ara...@gmail.com>
>
>
>
> > Já fiz isso, mas foi com richfaces/ajax4jsf.
>
> > 2009/7/8 Bruno Maomeh <brunomao...@gmail.com>
>
> >> "Pensei em criar uma action e um actionListener para o botão, mas nao sei
> >> se funciona, ja testaram?"
> >> cara.. isso é uma coisa tão simples de ser testada.. pq vc mesmo não
> >> testa? :)
>
> >> e por qual real motivo vc precisa dessas 2 chamadas?
>
> >> 2009/7/8 Tiago Augusto Nogueira Coelho <tiagoaugu...@gmail.com>

Rogerio Pereira

unread,
Jul 8, 2009, 9:00:23 AM7/8/09
to jav...@googlegroups.com
Abaixo segue uma alternativa para a questão:

<a4j:commandLink action="#{bean.acao1}" value="salvar" 
        oncomplete="document.getElementById('form:closeModal').click();" />

<a4j:commandLink id="closeModal" action="#{bean.acao2}" value="fechar" 
oncomplete="#{rich:component('modalPanel')}.hide();" reRender="tableDocumentos" />


2009/7/8 Daniel Camargo <danie...@gmail.com>

Gilliard Cordeiro

unread,
Jul 8, 2009, 9:07:57 AM7/8/09
to jav...@googlegroups.com
HtmlCommand{Button|Link} extendem UICommand que por sua vez tem um método addActionListener que recebe um ActionListener. O método que recebia um "método" como parâmetro está depreciado mesmo, agora você tem que colocar o mesmo na lista usando esse método que comentei. Como referência, tem isso no javadoc do jsf.

2009/7/8 Rogerio Pereira <rogerio...@gmail.com>



--
Gilliard Cordeiro
http://gilliard.eti.br

Rafaell Pinheiro

unread,
Jul 8, 2009, 11:51:06 AM7/8/09
to javasf: JavaServer Faces International Group
@Gilliard, valeu gilliard, já tinha visto o método addActionListener..
problema de fato é que nao estou sabendo utiliza-lo....

crio um ActionListenerImpl....

neste cara posso somente setar um ActionEvent.... ai pronto, n sei
caminhar....

se alguem souber de um exemplo favor postar.

obrigado a todos.

abs

Rafaell

On 8 jul, 10:07, Gilliard Cordeiro <gscorde...@gmail.com> wrote:
> HtmlCommand{Button|Link} extendem UICommand que por sua vez tem um método
> addActionListener que recebe um ActionListener. O método que recebia um
> "método" como parâmetro está depreciado mesmo, agora você tem que colocar o
> mesmo na lista usando esse método que comentei. Como referência, tem isso no
> javadoc do jsf.
>
> 2009/7/8 Rogerio Pereira <rogerio.ara...@gmail.com>
>
>
>
>
>
> > Abaixo segue uma alternativa para a questão:
>
> > <a4j:commandLink action="#{bean.acao1}" value="salvar"
> >         oncomplete="document.getElementById('form:closeModal').click();" />
>
> > <a4j:commandLink id="closeModal" action="#{bean.acao2}" value="fechar"
> > oncomplete="#{rich:component('modalPanel')}.hide();"
> > reRender="tableDocumentos" />
>
> > 2009/7/8 Daniel Camargo <danielsu...@gmail.com>
>
> > vc pode definir, sem problemas, uma action e uma actionListener para o
> >> mesmo commandButton.
>
> >> O actionListener é sempre chamado primeiro no ciclo de vida do JSF.
>
> >> o método para o actionListener precisa retornar void e receber como
> >> parametro um javax.faces.event.ActionEvent.
>
> >> Vai na fé!
>
> >> 2009/7/8 Rogerio Pereira <rogerio.ara...@gmail.com>
>
> >>>  Já fiz isso, mas foi com richfaces/ajax4jsf.
>
> >>> 2009/7/8 Bruno Maomeh <brunomao...@gmail.com>
>
> >>>> "Pensei em criar uma action e um actionListener para o botão, mas nao
> >>>> sei se funciona, ja testaram?"
> >>>> cara.. isso é uma coisa tão simples de ser testada.. pq vc mesmo não
> >>>> testa? :)
>
> >>>> e por qual real motivo vc precisa dessas 2 chamadas?
>
> >>>> 2009/7/8 Tiago Augusto Nogueira Coelho <tiagoaugu...@gmail.com>

Gilliard Cordeiro

unread,
Jul 8, 2009, 12:01:36 PM7/8/09
to jav...@googlegroups.com
Rafael, na verdade você não vai setar nada, esse ActionEvent você vai receber como parâmetro na tua implementação.
Na tua implementação você vai fazer o que você quiser, é uma implementação comum, nao tem nada de JSF nesse ponto, só Java mesmo. A parte JSF disso é que você recebe esse parâmetro que vai te proporcionar uma comunicação com o mundo JSF que está fora da tua implementação.

A "mágica" do dinamismo que você quer fazer provavelmente vai ser na hora de criar uma implementação específica, ou então passar para uma implementação básica alguma informação para ela saber o que fazer em tempo de execução (usando reflection).

Espero ter ajudado.

2009/7/8 Rafaell Pinheiro <rafa...@gmail.com>

Rafaell Pinheiro

unread,
Jul 8, 2009, 3:50:15 PM7/8/09
to jav...@googlegroups.com
@Gilliard
Na verdade eu preciso montar a pagina via código, entao crio os botoes e indico quais metodos esses botoes irao chamar. Para criar uma action para um botao é muito simples, mas nao consigo criar uma outra que seria o actionListener... O método é java é simples ver isso, porém meu componente precisa ser criado sabendo que vai chamar esse método. problema eh so na criacao.
Valeu pela ajuda, continuo com o gargalo.
abs
Rafaell

2009/7/8 Gilliard Cordeiro <gscor...@gmail.com>



--
Rafaell Pinheiro Sousa

Rafaell Pinheiro

unread,
Jul 9, 2009, 8:03:17 AM7/9/09
to javasf: JavaServer Faces International Group
Enfim resolvido,

quem precisar de algo parecido conferir no link:

http://www.icefaces.org/JForum/posts/list/7906.page

att

Rafaell

On 8 jul, 16:50, Rafaell Pinheiro <rafael...@gmail.com> wrote:
> @Gilliard
> Na verdade eu preciso montar a pagina via código, entao crio os botoes e
> indico quais metodos esses botoes irao chamar. Para criar uma action para um
> botao é muito simples, mas nao consigo criar uma outra que seria o
> actionListener... O método é java é simples ver isso, porém meu componente
> precisa ser criado sabendo que vai chamar esse método. problema eh so na
> criacao.
> Valeu pela ajuda, continuo com o gargalo.
> abs
> Rafaell
>
> 2009/7/8 Gilliard Cordeiro <gscorde...@gmail.com>
>
>
>
>
>
> > Rafael, na verdade você não vai setar nada, esse ActionEvent você vai
> > receber como parâmetro na tua implementação.
> > Na tua implementação você vai fazer o que você quiser, é uma implementação
> > comum, nao tem nada de JSF nesse ponto, só Java mesmo. A parte JSF disso é
> > que você recebe esse parâmetro que vai te proporcionar uma comunicação com o
> > mundo JSF que está fora da tua implementação.
>
> > A "mágica" do dinamismo que você quer fazer provavelmente vai ser na hora
> > de criar uma implementação específica, ou então passar para uma
> > implementação básica alguma informação para ela saber o que fazer em tempo
> > de execução (usando reflection).
>
> > Espero ter ajudado.
>
> > 2009/7/8 Rafaell Pinheiro <rafael...@gmail.com>

Marcos Aurélio da Silva Martins Aurélio

unread,
Jul 9, 2009, 12:42:30 PM7/9/09
to jav...@googlegroups.com
tente 2 usar <a4j:support >
 
Vai funcionar

2009/7/9 Rafaell Pinheiro <rafa...@gmail.com>



--
Marcos Aurélio da Silva Martins

tat0

unread,
Jul 10, 2009, 2:10:50 PM7/10/09
to javasf: JavaServer Faces International Group
aqui um brother usou um ActionListener, um Action e um <a:support
event="onclick" action="" />

Foram so 3 actions! uhauhauh :D

On 9 jul, 13:42, Marcos Aurélio da Silva Martins Aurélio
<tomyc...@gmail.com> wrote:
> tente 2 usar <a4j:support >
>
> Vai funcionar
>
> 2009/7/9 Rafaell Pinheiro <rafael...@gmail.com>
Reply all
Reply to author
Forward
0 new messages