Primefaces: Gmap: Ajax OnOverlaySelect

Created on 20 Nov 2018  路  3Comments  路  Source: primefaces/primefaces

  • Please use the naming convention for the title:
    Gmap: ajax overlayselect

1) Environment

  • PrimeFaces version: 6.2.10/primefaces/wiki/Building-From-Source)
  • Application server + version: Wildfly 14.0
  • Affected browsers: Chrome + Firefox

2) Expected behavior

After clicking on a Marker Gmap Info Window Opens

3) Actual behavior

Nothing Happens - Copied the stack Trace
WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (default task-60) java.lang.ClassCastException: javax.faces.event.ValueChangeEvent cannot be cast to javax.faces.event.AjaxBehaviorEvent: javax.faces.FacesException: java.lang.ClassCastException: javax.faces.event.ValueChangeEvent cannot be cast to javax.faces.event.AjaxBehaviorEvent
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:273)
at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:57)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1193)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1514)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1514)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1514)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1514)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:360)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
at java.lang.Thread.run(Thread.java:748)
..

4) Steps to reproduce

Add marker programmatically to GMAP with Info Window. Create new Marker With function called from Info Window. After clicking on any Marker on Gmap getting the error.

5) Sample XHTML










widgetVar="pmap"
model="#{apothekenMapMB.advancedModel}"
center="#{apothekenMapMB.centerMap}"
zoom="#{apothekenMapMB.mapZoom}"
type="HYBRID"
style="width:100%;
height:900px;">

                                <p:commandButton value="Zeige" action="#{apothekenMapMB.getAerzteInDistance()}" update="mainFrm:gmap" />    
                            </p:column>
                        </p:row>                        
                   </p:panelGrid>                  
            </p:gmapInfoWindow>
        </p:gmap>
    </h:form>
</h:body>

6) Sample bean

package managedBeans;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.annotation.PostConstruct;
import javax.faces.application.Application;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.map.OverlaySelectEvent;
import org.primefaces.model.map.Circle;
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.primefaces.model.map.Polyline;

import de.krieger.data.SQL;
import de.krieger.gmap.tools.LatLngDistance;
import lombok.Getter;
import lombok.Setter;
import model.Apotheke;
import model.ArztPraxis;

@ManagedBean(name="apothekenMapMB")
@SessionScoped
public class ApothekenMapMB implements Serializable {

@Getter private MapModel            advancedModel;
@Setter @Getter private String      centerMap;
@Setter @Getter private int         mapZoom;

private List<Apotheke>              apoListGH1 = new ArrayList<Apotheke>(),
                                    apoListGH2 = new ArrayList<Apotheke>(),
                                    apoListInaktiv = new ArrayList<Apotheke>();

private List<ArztPraxis>            arztList = new ArrayList<ArztPraxis>();
@Getter Marker marker;
@Getter @Setter double              entfernung = 250.0;
@Getter private String              b1 = "&b=1";
@Getter boolean                     isApoMarker = false;    
List<Marker>                        aerzte_Visible = null;

@PostConstruct
public void init() {
    advancedModel = new DefaultMapModel();
    centerMap = "50.35955312780162, 7.583527565002441";
    mapZoom = 13;
}

public void showApotheken() {

    //Variablen Initialisieren
    apoListGH1 = new ArrayList<Apotheke>();
    apoListGH2 = new ArrayList<Apotheke>();
    apoListInaktiv = new ArrayList<Apotheke>();

    // Hilfsvariable f眉r Listenerzeugung
    boolean firstResult = true;

    // Holen des FacesKontextes
    FacesContext fc = FacesContext.getCurrentInstance();

    // GmapModel bereinigen
    advancedModel.getMarkers().clear();

    //Erzeugen der Marker f眉r Apotheken

    for(Apotheke a : apoListGH1){

        LatLng l = getKoordForApo(a);

        if(l == null)
            continue;

        Marker m = new Marker (l);
        //Icons, Data, Title
        m.setIcon(fc.getExternalContext().getRequestContextPath() + "XX.png");
        m.setData("APO_"+a.getKdnr());
        m.setTitle(a.getApothekenName());
        advancedModel.addOverlay(m);

    }

    // Aufr盲umarbeiten
    System.gc();
}

public LatLng getKoordForApo(Apotheke a){
    LatLng result = null;
    result = new LatLng(a.getLat(), a.getLng());
    return result;
}

public void onMarkerSelect(OverlaySelectEvent event) throws Exception {

    System.out.println(event.getOverlay().getClass());
     if (event.getOverlay().getClass().getName().equals(Marker.class.getName())) {
        marker = (Marker) event.getOverlay();
        if(marker.getData().toString().contains("APO_")){
            isApoMarker = true;
            System.out.println("setting Center Map to : " + centerMap);
            centerMap = String.valueOf(marker.getLatlng().getLat()) + ", " + String.valueOf(marker.getLatlng().getLng());
        }
        else isApoMarker = false;
        System.out.println(marker.getData());
    }
}

public Apotheke getApothekeByKDNR(String kdnr){

    for(Apotheke a : apoListGH1){
        if(!kdnr.trim().isEmpty() && kdnr.replace("APO_", "").trim().equals(a.getKdnr().trim()))
            return a;
    }
    for(Apotheke a : apoListGH2){
        if(!kdnr.trim().isEmpty() && kdnr.replace("APO_", "").trim().equals(a.getKdnr().trim()))
            return a;
    }
    for(Apotheke a : apoListInaktiv){
        if(!kdnr.trim().isEmpty() && kdnr.replace("APO_", "").trim().equals(a.getKdnr().trim()))
            return a;
    }


    return null;
}

public void getAerzteInDistance(){

    // l枚schen aller Circles auf der karte
    advancedModel.getCircles().clear();

    // neuen Circle erstellen f眉r den AnzeigeRadius der 脛rzte, werte zuweisen und der Karte zuweisen
    Circle circle2 = new Circle(marker.getLatlng(), entfernung);
    circle2.setStrokeColor("#00ff00");
    circle2.setFillColor("#00ff00");
    circle2.setStrokeOpacity(0.5);
    circle2.setFillOpacity(0.5);
    advancedModel.addOverlay(circle2);

    if(aerzte_Visible == null)
        aerzte_Visible = new ArrayList<Marker>(500);
    else{
        advancedModel.getMarkers().removeAll(aerzte_Visible);
    }
    aerzte_Visible.clear();

    Application application = FacesContext.getCurrentInstance().getApplication();
    AerzteMapMB aerzteMapMB = application.evaluateExpressionGet(FacesContext.getCurrentInstance(), "#{aerzteMapMB}", AerzteMapMB.class);
    for(ArztPraxis ap : aerzteMapMB.getListArztPraxis()) {
        if(LatLngDistance.distFrom(marker.getLatlng(), new LatLng(ap.getLat(),ap.getLng())) < entfernung){
            Marker m = createMarkerFromArztPraxis(ap);
            advancedModel.addOverlay(m);
            aerzte_Visible.add(m);
        }
    }

    System.gc();

    entfernung = 250;
}

private Marker createMarkerFromArztPraxis(ArztPraxis ap) {
    Marker m = new Marker(new LatLng(ap.getLat(),ap.getLng()));
    m.setIcon(FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath() + "XX.png");
    m.setTitle("Dr. "+ap.getNachName() + "\n" + // Name
            "Fachbereich: "+ap.getFachBereich() + "\n" +
            ap.getStrasse() + "\n" +    // Strasse
            ap.getPlz() + " " + ap.getOrt() + "\n"  //PLZ Ort
            );
    return m;
}

}

defect invalid

Most helpful comment

This is not a runnable exmaple -> we don't have something like ArztPraxis
so please create a mvce

All 3 comments

This is not a runnable exmaple -> we don't have something like ArztPraxis
so please create a mvce

Was working in Version 6.1.8
Since i Updated to Version 6.2.10 i got this error like the stacktrace
I will make today a Running Exaple MVCE

Will close it for now. Feel free to create a new issue with a MVCE in the future.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

djmj picture djmj  路  5Comments

melloware picture melloware  路  5Comments

richmondspears picture richmondspears  路  5Comments

louayabdelhedi picture louayabdelhedi  路  3Comments

MatthiasScherrerFGCZ picture MatthiasScherrerFGCZ  路  4Comments