Metodos executam 2 vezes JSF + RichFaces

20 respostas
F

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 ?

20 Respostas

G

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.

F

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

S

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ó.

R

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ó.

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.

D

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.

D

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.

B

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

F

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("id", idObj);
    par.put("qtyPositions", quantidadePosicoes);
    par.put("map24", isMap24);

    try {

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

        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("-", "").replace("\n", " - ");
                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("Erro ao afetuar o login!");
        FacesUtils.mensErro("Falha");
        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])),
                "", "", todasPosicoesVeiculo[i][3]));
        System.out.println(todasPosicoesVeiculo[i][0] + " - " + todasPosicoesVeiculo[i][1]);
        //todasPosicoesVeiculo[i][2]
    }
    return mapModel;
}

public String printMapGoogle(ActionEvent event) {
    System.out.println("Print map");
    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() + " - " + bup.getDsEvent() + " - " + bup.getVelocity() + "km - " + bup.getEventTimeStr(),
                        ServiceConstants.URLIMAGENS + bup.getIconImage()}};
    } else {
        servicePosicoesMapa(bup.getIdObject(), conf.getEnumPosi().getTempo(), false);
    }
    return null;
}

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

        String[][] posicao = new String[][]{{"IMG1",
                "LAB1",
                bup.getDsEvent() + "\n"
                + bup.getTimeCel() + "\n"
                + "Vel. " + new Integer(bup.getVelocity()).toString() + " km/h.\n"
                + "Dir. " + Coordenadas.getDirecao(bup.getGpsDegree()),
                bup.getPlaca(),
                "PRETO",
                "BRANCO",
                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("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;
}

public String getUltimaPosicao() {
    if (bup == null) {
        return "";
    }
    ultimaPosicao = "";
    ultimaPosicao += Float.toString(bup.getLatitude()) + ", " + 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>
D

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.

F

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.

F

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

D

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".

F

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;
    }
D

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;
  }

}
F

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.

D

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.

F

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

F

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

K

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

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

Agradeço a cooperação.

F

Cara oque eu fiz foi mudar a lógica, em fez de chamar a lista no metodo get eu fiz um metodos que para carregar a lista assim quando o getList é chamado ele já esta populado.
abs

Criado 4 de outubro de 2010
Ultima resposta 22 de out. de 2012
Respostas 20
Participantes 7