Duvida JSF - 1.1 vs 1.2

4 respostas
M

Olá pessoal,

Tenho a seguinte dúvida:

Tenho um projeto em JSF 1.1 e irei atualizalo para o JSF 1.2(Já estou fazendo isso) e reparei uma diferença entre eles que no seguinte código:

<a4j:commandButton value="Atualizar ActionListener" actionListener="#{testeBean.actionListener}" reRender="nome">
    <t:updateActionListener property="#{testeBean.nome}" value="Marcos"/>
</a4j:commandButton>

No JSF 1.1:
1º Ele seta o valor Marcos na propriedade testeBean.nome
2º Executa o método ActionListener

No JSF 1.2
1º Executa o método ActionListener
2º Ele seta o valor Marcos na propriedade testeBean.nome

Isso está correto?

Tentei explicar o mais detalhado possível, porém se você não conseguiu entender pergunte que tentarei explicar melhor ainda!

Obrigado senhores!

4 Respostas

B

segundo a documentação deve setar logo quando chama o action (primeiro caso que vc mostrou). mesmo pq, quando a gente usa isso é pq quer alguma informação disponível quando o método for executado.
Na versão 1.2 do jsf foi criado o f:setPropertyActionListener para fazer a mesma coisa, então esse componente perdeu a razão de existir. :slight_smile:

M

Olá bobmoe!

Tudo bem?

Oh então o certo é:
1º Ele seta o valor Marcos na propriedade testeBean.nome
2º Executa o método ActionListener

Porém ele faz ao contrário! Por que será?

Tentei utilizar o f:setPropertyActionListener, mas sem sucesso também!

<a4j:commandButton value="Atualizar ActionListener" actionListener="#{testeBean.actionListener}" reRender="nome">
            <f:setPropertyActionListener target="#{testeBean.nome}" value="Marcos"/>
        </a4j:commandButton>

Abraços

M

Ah uma situação curiosa troquei o método de ActionListener para Action, e também mudei a assinatura do método para String e sem parâmetros, simplismente funcionou da maneira correta:

1º Ele seta o valor Marcos na propriedade testeBean.nome
2º Executa o método ActionListener

<a4j:commandButton value="Atualizar Action" action="#{testeBean.action}" reRender="teste">
            <f:setPropertyActionListener target="#{testeBean.nome}" value="Marcos"/>
        </a4j:commandButton>

E o método:

public String action() {
        System.out.println("Action");
        return "";
    }

Abraços

A

Repare que você não está mais usando “actionListener”, mas somente “action”. Por isso funcionou. Eu, por exemplo, preciso usar “actionListener”, pois o “action” faz refresh da página e fecha um pop-up que eu tenho.

Veja o tópico:
http://www.guj.com.br/java/136457-jsf—ciclo-actionlistener#1372653
Abraços!

Criado 2 de setembro de 2009
Ultima resposta 11 de jan. de 2012
Respostas 4
Participantes 3