Pessoal,
Estou com um problema no componente gmaps4jsf que esta me tirando o sono. Preciso atualizar uma “marca” dinamicamente, ou seja, atualizar o mapa sem precisar “recarregar” todo o mapa. Eu consigo fazer isso, mas ele sempre “recarrega” todo o mapa. Segue o código abaixo:
<a4j:region id="panel-region">
<a4j:outputPanel id="map" layout="block">
<m:map id="eventmap" width="800px" height="600px" latitude="-23.008964" longitude="-45.681152"
jsVariable="eventmap" zoom="2"
partiallyTriggered="true"
renderOnWindowLoad="false" autoReshape="true">
<a4j:repeat id="markers" var="loc" value="#{monitorBean.data}">
<m:marker latitude="#{loc.latitude}" longitude="#{loc.longitude}">
<m:htmlInformationWindow htmlText="<b>#{loc.latitude}-#{loc.longitude}</b>" />
</m:marker>
</a4j:repeat>
</m:map>
</a4j:outputPanel>
</a4j:region>
<h:selectOneMenu id="atualizacao" value="#{monitorBean.tempoAtualizacao}" defaultLabel="Selecione uma opção..." valueChangeListener="#{monitorBean.trocaTempoAtualizacao}">
<f:selectItem itemValue="90000000" itemLabel="Selecione" ></f:selectItem>
<f:selectItem itemValue="5000" itemLabel="A cada 5 segundos"></f:selectItem>
<f:selectItem itemValue="10000" itemLabel="A cada 10 segundos"></f:selectItem>
<f:selectItem itemValue="100000" itemLabel="A cada 1 minuto"></f:selectItem>
<a4j:ajax event="valueChange" render="eventmap" execute="@this" />
</h:selectOneMenu>
public void trocaTempoAtualizacao(ValueChangeEvent event) {
data.add(new Monitor("-23.540206" , "-46.677325","","marker_99"));
}
Conforme eu disse, ele atualiza, ele coloca a nova “marca” etc…porém, somente depois de atualizar “todo” o mapa. O problema em acontecer isso, é que se o usuário estiver em uma certa posição no mapa, e o mapa for “recarregado” ele aponta diretamente para a nova marca, ou seja, ele perde a localização anterior onde o usuário estava navegando.
Alguém tem alguma ideia ?