Metodos executam 2 vezes JSF + RichFaces

Boa tarde para todos,

Estou debugando um aplicativo e até colquei um sysout quando clico no link a4j:commandLink e coloco um break point ele chama o métodos 2 vezes,
laguém sabe pque ta pegando ?

Cara eu sempre tive esta dúvida também. Se vocẽ colocar um breakpoint num get/set vai ver que ele chega a chamar várias vezes.

Eu imagino que seja por causa do seu ciclo de 7 vidas e a cada ciclo ele vai lá no get/set fazer algo. Agora os métodos no managed-bean são executados apenas uma vez. Com certeza.

Mas eu coloquei o breakPoint no método, que ta linkado no action

Eu já tive esse problema, sim é por causa do ciclo de vida, na época era uma método de consulta que retornava uma lista para o h:dataTable.

Eu tive que fazer uma gambi p/ resolver,

if (lista != null) buscaNoBanco();

mas até hoje não sei como se faz para chamar uma vez só.

[quote=sl4ckfx]Eu já tive esse problema, sim é por causa do ciclo de vida, na época era uma método de consulta que retornava uma lista para o h:dataTable.

Eu tive que fazer uma gambi p/ resolver,

if (lista != null) buscaNoBanco();

mas até hoje não sei como se faz para chamar uma vez só.[/quote]

Tbm faço assim.
Mas,se quiser ir mais a fundo,de repente dá pra usar um PhaseListener e verificar o momento que as chamadas são feitas.

Métodos getter e setter podem ser chamados varias vezes ao longo do ciclo de vida do JSF, isso é normal. Agora a action só é executada uma unica vez na fase INVOKE APPLICATION. Posto o seu código ai p/ eu poder dar uma olhada. Mas por favor posta o código inteiro do bean e da view e se possível o faces-config.xml, pq é f**a, além de ajuda ainda ter q ficar pedindo o código pedaço por pedaço.

Só um detalhe. Se alguém estiver colocando consultas em getters ou setters PARE!! Getters e setters são executados várias vezes ao longo do ciclo de vida do JSF (onde eu já ouvi isso :)). Use actions p/ isso.

Já aconteceu algo parecido comigo. Se você estiver usando o atributo “actionListener”, troque por “action”.

Estranho o post na ta mais mandando email para mim. :frowning:

Cara mas a tela é gigante tem um tanto de include esse é oque ta pegando. Oque acontece é dou um reRender no <rich:extendedDataTable ele chama o
public DataModel getTodasPosicoes() duas vezes esse viado demora uma ano pra pesquisar no banco que é gigante.

><?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”>
<ui:composition xmlns=“http://www.w3.org/1999/xhtml
xmlns:h=“http://java.sun.com/jsf/html
xmlns:a4j=“http://richfaces.org/a4j
xmlns:rich=“http://richfaces.org/rich
xmlns:f=“http://java.sun.com/jsf/core
xmlns:p=“http://primefaces.prime.com.tr/ui
xmlns:ui=“http://java.sun.com/jsf/facelets”>

&lt;head&gt;
    &lt;meta http-equiv="Content-Type" content="text/html;charset=utf-8" /&gt;
&lt;/head&gt;

&lt;body&gt;

     &lt;p:growl  showSummary="false" /&gt;

    &lt;a4j:form &gt;
        &lt;table class="fontTable" style="font-size:11px;" &gt;
            &lt;tr&gt;
                &lt;td&gt;Quantidade de posições visíveis no mapa:&lt;/td&gt;
                &lt;td&gt;&lt;h:selectOneMenu  styleClass="dispInline" style="width:100px;" value="#{config.qtdPosicoes}"  &gt;
                        &lt;f:selectItems value="#{config.itensQtdPosicoes}" /&gt;
                        &lt;a4j:support event="onchange" reRender="grid" &gt;
                            &lt;f:param  value="false" name="par" /&gt;
                        &lt;/a4j:support&gt;
                    &lt;/h:selectOneMenu&gt;
                &lt;/td&gt;
                &lt;td&gt;Exibir todos veículos do grid no mapa:&lt;/td&gt;
                &lt;td&gt;
                    &lt;a4j:commandLink reRender="panelGoogle" onclick="dlg.show()" actionListener="#{controllerPosicoes.printMapGoogle}" &gt;
                        &lt;p:graphicImage value="/images/googlearth.png"  style="border: none;margin-right:10px"   /&gt;
                    &lt;/a4j:commandLink  &gt;
                    &lt;a4j:commandLink id="linkMap24"  action="#{controllerPosicoes.printTodasPosicoesGridMapa}" onclick="dlg.hide()"   &gt;
                        &lt;p:graphicImage   value="/images/map24_16.png" style="border:none;"  onclick="RichFaces.switchTab('tabpanel','tabMap24','gridPosicoes')"      /&gt;
                    &lt;/a4j:commandLink  &gt;
                &lt;/td&gt;
                &lt;td&gt;Exibir placas no mapa:&lt;/td&gt;
                &lt;td&gt;
                    &lt;h:selectOneMenu  styleClass="dispInline" style="width:120px;"   value="#{config.qtdPosicoes}"  &gt;
                        &lt;f:selectItems value="#{config.itensPlaca}" /&gt;
                    &lt;/h:selectOneMenu&gt;

                &lt;/td&gt;
                &lt;td rowspan="2" width="100px"  &gt;
                    &lt;a4j:commandButton action="#{config.saveConf}" value="Atulalizar" reRender="grid"  /&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;Atualização automatica do grid a cada:&lt;/td&gt;
                &lt;td&gt;
                    &lt;h:selectOneMenu   value="#{config.atualizar}"  style="margin:0 40px 0 0;width:100px;" &gt;
                        &lt;f:selectItems value="#{config.itensAtualizar}"  /&gt;
                        &lt;a4j:support event="onchange"  reRender="poll" &gt;
                            &lt;f:param  value="false" name="par" /&gt;
                        &lt;/a4j:support&gt;
                    &lt;/h:selectOneMenu&gt;
                &lt;/td&gt;
                &lt;td&gt;Marcar no grid veículos com velocidade acima de:&lt;/td&gt;
                &lt;td&gt;
                    &lt;h:selectOneMenu styleClass="lef10px"    style="margin:0 40px 0 0;width:65px;"  value="#{config.velocidade}"  &gt;
                        &lt;f:selectItems value="#{config.itensVelocidade}" /&gt;
                        &lt;a4j:support event="onchange" reRender="grid" /&gt;
                    &lt;/h:selectOneMenu&gt;
                &lt;/td&gt;
                &lt;td&gt;Grupo(s):&lt;/td&gt;
                &lt;td&gt;
                    &lt;h:selectOneMenu styleClass="left10px" style="margin:0 40px 0 0;width:120px"  value="#{controllerPosicoes.idClassGroup}" &gt;
                        &lt;f:selectItems  value="#{controllerPosicoes.grupos}" /&gt;
                        &lt;a4j:support event="onchange" reRender="grid"   /&gt;
                    &lt;/h:selectOneMenu&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
        &lt;/table&gt;
    &lt;/a4j:form&gt;

    &lt;a4j:form&gt;
        &lt;!-- tableState="#{config.gridState}" --&gt;
        &lt;rich:extendedDataTable  width="100%" sortMode="multi" id="grid" var="item"  value="#{controllerPosicoes.todasPosicoes}"   &gt;
            &lt;f:facet name="header"&gt;
                &lt;h:outputText value="Informações do veículo"  styleClass="#{item.velocity &gt; config.velocidade ? 'textRed':'textBlack'}"    /&gt;
            &lt;/f:facet&gt;
            &lt;rich:column width="11%"  &gt;
                &lt;a4j:commandLink &gt;
                    &lt;h:graphicImage value="/images/edit.png"  style="border:none;margin-right:10px"   onclick="#{rich:component('dadoMot')}.show()"  /&gt;
                &lt;/a4j:commandLink&gt;
                &lt;a4j:commandLink reRender="panelGoogle" onclick="dlg.show()" actionListener="#{controllerPosicoes.printMapGoogle}" &gt;
                    &lt;p:graphicImage value="/images/googlearth.png"  style="border: none;margin-right:10px"   /&gt;
                    &lt;f:param  value="false" name="par" /&gt;
                &lt;/a4j:commandLink  &gt;
                &lt;a4j:commandLink id="linkMap24"  actionListener="#{controllerPosicoes.printMap24}"   onclick="dlg.hide()"  &gt;
                    &lt;p:graphicImage   value="/images/map24_16.png" style="border:none;" onclick="RichFaces.switchTab('tabpanel','tabMap24','gridPosicoes')"       /&gt;
                    &lt;f:param  value="false" name="par" /&gt;
                &lt;/a4j:commandLink  &gt;
            &lt;/rich:column&gt;
            &lt;rich:column sortable="true" width="25%"  label="Nome" id="Nome" &gt;
                &lt;f:facet name="header"&gt;
                    &lt;h:outputText value="Veículo" /&gt;
                &lt;/f:facet&gt;
                &lt;h:outputText value="#{item.cdObject}" styleClass="#{item.velocity &gt; config.velocidade ? 'textRed':'textBlack'}"      /&gt;
            &lt;/rich:column&gt;
            &lt;rich:column sortable="true" width="8%"  id="Velocidade"  label="Velocidade"   &gt;
                &lt;f:facet name="header"&gt;
                    &lt;h:outputText value="Evento" /&gt;
                &lt;/f:facet&gt;
                &lt;h:outputText value="#{item.dsEvent}" styleClass="#{item.velocity &gt; config.velocidade ? 'textRed':'textBlack'}"     /&gt;
            &lt;/rich:column&gt;
            &lt;rich:column sortable="true"   width="5%" label="Km/h" &gt;
                &lt;f:facet name="header"&gt;
                    &lt;h:outputText value="Km/h" /&gt;
                &lt;/f:facet&gt;
                &lt;h:outputText value="#{item.velocity}" styleClass="#{item.velocity &gt; config.velocidade ? 'textRed':'textBlack'}"      /&gt;
            &lt;/rich:column&gt;
            &lt;rich:column sortable="true"  width="38%" label="Endereço"  &gt;
                &lt;f:facet name="header"&gt;
                    &lt;h:outputText value="Endereço" /&gt;
                &lt;/f:facet&gt;
                &lt;h:outputText value="#{item.cidade}" styleClass="#{item.velocity &gt; config.velocidade ? 'textRed':'textBlack'}"      /&gt;
            &lt;/rich:column&gt;
            &lt;rich:column sortable="true" width="13%"  label="Data/Hora"  &gt;
                &lt;f:facet name="header"&gt;
                    &lt;h:outputText value="Data/Hora" /&gt;
                &lt;/f:facet&gt;
                &lt;h:outputText value="#{item.eventTimeStr}" styleClass="#{item.velocity &gt; config.velocidade ? 'textRed':'textBlack'}"      /&gt;
            &lt;/rich:column&gt;
        &lt;/rich:extendedDataTable&gt;
    &lt;/a4j:form&gt;

&lt;/body&gt;

</ui:composition>

package br.com.totalsat.jsf.controller;

import br.com.totalsat.common.Coordenadas;
import br.com.totalsat.common.ServiceConstants;
import br.com.totalsat.common.ServicesName;
import br.com.totalsat.common.beans.BeanFrota;
import br.com.totalsat.common.beans.BeanPlacaSelecionada;
import br.com.totalsat.common.beans.BeanUltimaPosicao;
import br.com.totalsat.common.dto.DtoAccUser;
import br.com.totalsat.common.exceptions.LastPositionNotFoundException;
import br.com.totalsat.common.exceptions.MyOwnException;
import br.com.totalsat.common.exceptions.ServiceDenniedException;
import br.com.totalsat.common.exceptions.UserNotLoggedException;
import br.com.totalsat.common.soa.GenericCommand;
import br.com.totalsat.common.soa.ServiceBroker;
import br.com.totalsat.jsf.conf.Conf;
import br.com.totalsat.jsf.util.FacesUtils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.MapModel;
import org.primefaces.model.map.Marker;
import org.springframework.remoting.RemoteConnectFailureException;

public class ControllerPosicoes {

private List&lt;BeanPlacaSelecionada&gt; placas;
private List&lt;BeanUltimaPosicao&gt; posicoes;
private int totalMsg;
private int idClassGroup;
private boolean verMsg;
private DtoAccUser dtoUser;
private String[][] todasPosicoesVeiculo;
private String[][] todasPosicoesDoGrid;
private List&lt;BeanFrota&gt; listaFrota;
private DataModel dataModelPosicoes;
private ClientService cs;
private ServiceBroker sb;
private ControllerMap map;
private MapModel mapModel;
private String ultimaPosicao = "-25.501726,-49.295999";
private BeanUltimaPosicao bup;
private boolean enablePosic = true;
private String info;
private Conf conf;
private ControllerMap24 controllerMap24;

public void setControllerMap24(ControllerMap24 map24) {
    this.controllerMap24 = map24;
}

public ControllerPosicoes() {
}

public void setCs(ClientService cs) {
    this.cs = cs;
}

public void setSb(ServiceBroker sb) {
    this.sb = sb;
}

public List&lt;SelectItem&gt; getGrupos() {

    if (listaFrota == null) {
        listaFrota = new ArrayList&lt;BeanFrota&gt;();
    }
    List&lt;SelectItem&gt; list = new ArrayList&lt;SelectItem&gt;();
    for (BeanFrota bf : listaFrota) {
        SelectItem si = new SelectItem(bf.getCdClassGroup());
        si.setLabel(bf.getCdClassGroup());
        si.setValue(bf.getIdClassGroup());
        list.add(si);
    }
    return list;
}

public String getInfo() {
    return info;
}

public void servicePlacas() {
    Map&lt;String, Object&gt; par = new HashMap&lt;String, Object&gt;();
    par.put("idFrota", "0");
    try {
        placas = (List&lt;BeanPlacaSelecionada&gt;) cs.executeService(ServicesName.SERVICE_PLACA_GRUPO_CLASSE, par, "");
    } catch (MyOwnException ex) {
        FacesUtils.mensErro(ex.getMessage());
        ex.printStackTrace();
    } catch (Exception ex) {
        FacesUtils.mensErro("Falha ao carregar as placas do grupo!");
        ex.printStackTrace();
    }
}

public void servicePosicoesMapa(int idObj, int quantidadePosicoes, boolean isMap24) {
    Map&lt;String, Object&gt; par = new HashMap&lt;String, Object&gt;();
    par.put(&quot;id&quot;, idObj);
    par.put(&quot;qtyPositions&quot;, quantidadePosicoes);
    par.put(&quot;map24&quot;, isMap24);

    try {

        //{imageId, labelId, toolTip, label, corTexto, corBckg, direcao, longitude, latitude, icon}
        String[][] posicoes = (String[][]) cs.executeService(ServicesName.SERVICE_POSICOES_MAPA, par, &quot;&quot;);

        if (!isMap24) {
            todasPosicoesVeiculo = new String[posicoes.length][4];
            //lat - 0 / long - 1 / infoMap - 2 / link ícone - 3
            for (int i = 0; i &lt; posicoes.length; i++) {
                todasPosicoesVeiculo[i][0] = posicoes[i][8];
                todasPosicoesVeiculo[i][1] = posicoes[i][7];
                todasPosicoesVeiculo[i][2] = posicoes[i][2].replace(&quot;-&quot;, &quot;&quot;).replace(&quot;\n&quot;, &quot; - &quot;);
                todasPosicoesVeiculo[i][3] = ServiceConstants.URLIMAGENS + posicoes[i][9];
            }
        } else {
            controllerMap24.showMap(posicoes);
        }


    } catch (MyOwnException ex) {
        //    FacesUtils.mensErro(ex.getMessage());
        ex.printStackTrace();
    } catch (Exception ex) {
        //     FacesUtils.mensWarn(&quot;Erro ao afetuar o login!&quot;);
        FacesUtils.mensErro(&quot;Falha&quot;);
        ex.printStackTrace();
    }
}

public List&lt;BeanUltimaPosicao&gt; serviceUltimasPosicoes(String idGroup,
        List&lt;BeanFrota&gt; grupos, boolean isAddress) {

    GenericCommand gc = new GenericCommand(ServicesName.SERVICE_ULTIMAS_POSICOES);
    gc.putValue("orderBy", 0);
    gc.putValue("idGroup", idGroup);
    gc.putValue("dtoUser", dtoUser);
    gc.putValue("grupos", grupos);
    gc.putValue("isAddress", isAddress);
    gc.putValue("map24Coordinate", false);

    try {
        gc = (GenericCommand) sb.execute(gc);
    } catch (RemoteConnectFailureException e) {
        FacesUtils.msgPerdaConxao();
        return new ArrayList&lt;BeanUltimaPosicao&gt;();
    }

    if (gc.getThrowedException() == null) {
        setVerMsg(((Boolean) gc.getValue("verMsg")).booleanValue());
        setTodasPosicoesDoGrid((String[][]) gc.getValue("objMap"));
        setTotalMsg(((Integer) gc.getValue("totalMsg")).intValue());
        return (List&lt;BeanUltimaPosicao&gt;) gc.getResult();
    } else {
        Exception ex = gc.getThrowedException();
        if (ex instanceof LastPositionNotFoundException
                || ex instanceof ServiceDenniedException
                || ex instanceof UserNotLoggedException) {
            FacesUtils.mensErro(ex.getMessage());
        } else {
            ex.printStackTrace();
            FacesUtils.mensErro("Erro ao recuperar últimas posições.");
        }
        return new ArrayList&lt;BeanUltimaPosicao&gt;();
    }

}

public String printTodasPosicoesGridMapa() {
    controllerMap24.showMap(todasPosicoesDoGrid);
    return null;
}

public MapModel getMapModel() {

    if (bup == null) {
        return null;
    }
    mapModel = new DefaultMapModel();


    for (int i = 0; i &lt; todasPosicoesVeiculo.length; i++) {
        mapModel.addOverlay(
                new Marker(new LatLng(Double.parseDouble(todasPosicoesVeiculo[i][0]), Double.parseDouble(todasPosicoesVeiculo[i][1])),
                &quot;&quot;, &quot;&quot;, todasPosicoesVeiculo[i][3]));
        System.out.println(todasPosicoesVeiculo[i][0] + &quot; - &quot; + todasPosicoesVeiculo[i][1]);
        //todasPosicoesVeiculo[i][2]
    }
    return mapModel;
}

public String printMapGoogle(ActionEvent event) {
    System.out.println(&quot;Print map&quot;);
    bup = getVeiculoSelecionado();
    if (conf.getEnumPosi().getTempo() == 0) {
        //lat - 0 / long - 1 / infoMap - 2 / link ícone - 3
        todasPosicoesVeiculo = new String[][]{{Float.toString(bup.getLatitude()), Float.toString(bup.getLongitude()),
                        bup.getPlaca() + &quot; - &quot; + bup.getDsEvent() + &quot; - &quot; + bup.getVelocity() + &quot;km - &quot; + bup.getEventTimeStr(),
                        ServiceConstants.URLIMAGENS + bup.getIconImage()}};
    } else {
        servicePosicoesMapa(bup.getIdObject(), conf.getEnumPosi().getTempo(), false);
    }
    return null;
}

public String printMap24(ActionEvent event) {
    System.out.println(&quot;Print map24&quot;);
    bup = getVeiculoSelecionado();
    if (conf.getEnumPosi().getTempo() == 0) {
        //{imageId, labelId, toolTip, label, corTexto, corBckg, direcao, longitude, latitude, icon}

        String[][] posicao = new String[][]{{&quot;IMG1&quot;,
                &quot;LAB1&quot;,
                bup.getDsEvent() + &quot;\n&quot;
                + bup.getTimeCel() + &quot;\n&quot;
                + &quot;Vel. &quot; + new Integer(bup.getVelocity()).toString() + &quot; km/h.\n&quot;
                + &quot;Dir. &quot; + Coordenadas.getDirecao(bup.getGpsDegree()),
                bup.getPlaca(),
                &quot;PRETO&quot;,
                &quot;BRANCO&quot;,
                Coordenadas.getDirecao(bup.getGpsDegree()),
                Float.toString(Coordenadas.getCoordenada(bup.getLongitude())),
                Float.toString(Coordenadas.getCoordenada(bup.getLatitude())),
                bup.getIcon(),
                bup.getCidade()
            }};

        controllerMap24.showMap(posicao);

    } else {
        servicePosicoesMapa(bup.getIdObject(), conf.getEnumPosi().getTempo(), true);
    }
    return null;
}

public int getTotalMsg() {
    return totalMsg;
}

public void setTotalMsg(int totalMsg) {
    this.totalMsg = totalMsg;
}

public boolean isVerMsg() {
    return verMsg;
}

public void setVerMsg(boolean verMsg) {
    this.verMsg = verMsg;
}

private BeanUltimaPosicao getVeiculoSelecionado() {
    BeanUltimaPosicao beUp = (BeanUltimaPosicao) dataModelPosicoes.getRowData();
    return beUp;
}

public DataModel getTodasPosicoes() {
    String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(&quot;par&quot;);
     System.out.println(&quot;Chamou o método :&quot; + id);
    if (id != null) {
        enablePosic = Boolean.parseBoolean(id);
   }
    if (enablePosic == true) {
        System.out.println(&quot;Atualizar&quot;);
        posicoes = serviceUltimasPosicoes(idClassGroup + &quot;&quot;, listaFrota, false);
        dataModelPosicoes = new ListDataModel(posicoes);
    }
    enablePosic = true;
    return dataModelPosicoes;
}

public String getUltimaPosicao() {
    if (bup == null) {
        return &quot;&quot;;
    }
    ultimaPosicao = &quot;&quot;;
    ultimaPosicao += Float.toString(bup.getLatitude()) + &quot;, &quot; + Float.toString(bup.getLongitude());
    return ultimaPosicao;
}

public void setTodasPosicoesDoGrid(String[][] pg) {
    this.todasPosicoesDoGrid = pg;
}

public int getIdClassGroup() {
    return idClassGroup;
}

public void setIdClassGroup(int idClassGroup) {
    this.idClassGroup = idClassGroup;
}

public void setDtoUser(DtoAccUser dtoUser) {
    this.dtoUser = dtoUser;
}

public void setListaFrota(List&lt;BeanFrota&gt; listaFrota) {
    this.listaFrota = listaFrota;
}

public ControllerMap getMap() {
    return map;
}

public void setMap(ControllerMap map) {
    this.map = map;
}

public void setMapModel(MapModel mapModel) {
    this.mapModel = mapModel;
}

public void setUltimaPosicao(String ultimaPosicao) {
    this.ultimaPosicao = ultimaPosicao;
}

public void setConf(Conf conf) {
    this.conf = conf;
}

public boolean isEnablePosic() {
    return enablePosic;
}

public void setEnablePosic(boolean enablePosic) {
    this.enablePosic = enablePosic;
}

}

<managed-bean>
<managed-bean-name>controllerPosicoes</managed-bean-name>
<managed-bean-class>br.com.totalsat.jsf.controller.ControllerPosicoes</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>cs</property-name>
<value>#{clientService}</value>
</managed-property>
<managed-property>
<property-name>sb</property-name>
<value>#{serviceBroker}</value>
</managed-property>
<managed-property>
<property-name>controllerMap24</property-name>
<value>#{controllerMap24}</value>
</managed-property>
<managed-property>
<property-name>conf</property-name>
<value>#{config}</value>
</managed-property>
</managed-bean>

Kra, na boa, da próxima vez coloca o seu código entre tags [code] q ajuda p/ caraca!!

Agora quanto ao seu problema, vc está colocando uma consulta em um método get e isso é ERRADO!!! Como eu já disse no post anterior, métodos get são chamados várias vezes ao longo do ciclo de vida do JSF e colocar uma consulta ali f**e com a performance do seu aplicativo. Ao invés disso use um método @PostConstruct p/ fazer as consultas e cachear os resultados.

Como assin coloco um [code] no incio do código e um no final ?

Como voi linka o dataTable no managedBean se não utilizar o get ?

Aqui

[code] value="#{controllerPosicoes.todasPosicoes}" [code]

Valeu vou tentar colocar o @PostConstruct em cima do método public DataModel getTodasPosicoes() para ver oque rola.

Abraço.

Caro dev.rafael não deu certo :frowning:

Da p/ postar ai os problemas q ocorreram?

PS.: quando for postar código coloca um [code] no inicio e um [//code] (é uma barra só, eu só coloquei duas pq seão não ia aparecer :)) no final.
Ou só clica no botão “Code”.

Ué coloquei a annotatin no método mas ele continua chamando ele duas vezes.


   @PostConstruct
    public DataModel getTodasPosicoes() {
        String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("par");
         System.out.println("Chamou o método :" + id);
        if (id != null) {
            enablePosic = Boolean.parseBoolean(id);
       }
        if (enablePosic == true) {
            System.out.println("Atualizar");
            posicoes = serviceUltimasPosicoes(idClassGroup + "", listaFrota, false);
            dataModelPosicoes = new ListDataModel(posicoes);
        }
        enablePosic = true;
        return dataModelPosicoes;
    }

Faça assim:

@Named
@RequestScoped
public class MyBean {

  @Inject EntityManager em;

  private List<MyEntity> cache;

  @PostConstruct
  protected void init() {
    cache = em.createNamedQuery("consulta_muito_complexa_q_demora_muito", MyEntity.class).getResultList();
  }

  public List<MyEntity> getEntities() {
    return cache;
  }

}

O método anotado como @PostConstruct será executado apenas no momento em q o seu ManagedBean instanciado. O método get será executado várias vezes, mas a consulta já foi realizada. Se vc estiver dependendo de algum atributo p/ usar como parâmetro da consulta então vc pode mudar essa estratégia um pouco p/ conseguir o mesmo resultado:

@Named
public class MyBean {

  @Inject EntityManager em;

  private List<MyEntity> cache;

  public List<MyEntity> getMyEntities() {
    if (cache == null) {
      cache = em.createNamedQuery("consulta_muito_demorada_q_usa_parametros", MyEntity).getResultList();
    }
    return cache;
  }

}

Então mas o problema é esse grid é um grid que é atualizado toda hora ele mostra as localizações de um veiculo.
Entao eu uso esse método toda hora que atualiza a tabela.

Não tem problema. Marque o seu ManagedBean como RequestScoped e o Bean será destruído ao final de cada requisição. Assim cada nova requisição fará a consulta no banco novamente.

Entendi, vou tentar aqui valeu mesmo pela força.

Puts cara depois de muito trabalho deu certo, tipo que fazer um tanto de rolo aqui.
Valeu mesmo pela ajuda

[quote=Flavio machine] Puts cara depois de muito trabalho deu certo, tipo que fazer um tanto de rolo aqui.
Valeu mesmo pela ajuda[/quote]

Amigo, pode postar sua solução?? Estou com o mesmo problema, e nada recomendado deu certo.

Agradeço a cooperação.