Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Chamando uma função duas vezes

Pessoal eu fiz um método que tinha como objetivo contar o numero de acessos na pagina, o metodo funciona mas está sendo chamado duas vezes em um só acesso, olhem abaixo o código:

@ManagedBean
@SessionScoped
public class RatingView implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Integer rating3;
    private int numAcessos;

    public int getNumAcessos() {
        System.out.println("Antes do Incremento" + numAcessos);
        ++numAcessos;
        System.out.println("Depois do Incremento" + numAcessos);
        return numAcessos; 
    }

    public void setNumAcessos(Integer numAcessos) {
        this.numAcessos = numAcessos;
    }

Este é o XHTML da pagina que é chamada:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

<ui:composition template="_template.xhtml">


    <ui:define name="Avaliação">
        <p:outputPanel>Livro</p:outputPanel>
    </ui:define>

    <ui:define name="conteudo">

        <h:form>
            <p:growl id="messages" showDetail="true" />

            <h:panelGrid columns="2" cellpadding="5">

                <h:outputText value="Avaliação:" />
                <p:rating value="#{ratingView.rating3}">
                    <p:ajax event="rate" listener="#{ratingView.onrate}"
                        update="messages" />
                    <p:ajax event="cancel" listener="#{ratingView.oncancel}"
                        update="messages" />
                </p:rating>

            </h:panelGrid>


                          //Coloquei o metodo para ser chamado neste botão abaixo
                       //apenas para visualizar como se comporta a função
            <p:commandButton value="#{ratingView.numAcessos}" 
                oncomplete="PF('dlg').show()"/>


        </h:form>




    </ui:define>

</ui:composition>

</html>

Estou desconfiando que ao carregar o botão o metodo está sendo chamado duas vezes, o que acham ???

3 respostas

Fala Clinton, tudo bem?

Isso acontece porque o seu método é no get do atributo. Como o JSF chama o get dos atributos mais de uma vez durante o seu ciclo de vida, o seu contador será chamado mais de uma vez. Para arrumar isso, tenta fazer um outro método fora do get. Depois conta pra gente se deu certo =).

Abraço

solução!

Olá,

Obrigado pela resposta Samir, eu mudei ele para o componente commandLink e funcionou normal, vou fazer o teste que aconselhou e volto aqui para reportar a todos, obrigado.

Boa, Clinton! O mais importante é funcionar =).

Mas a questão é, será que vc deve trocar o componente botão por um link? Mas isso, ai! Faz o teste e conta pra gente.

abraço

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software