2017-06-20 42 views
0

對於項目需求,我需要使用primefaces 6.1 p:gmap標記渲染多段線,但只渲染地圖。這裏是我的XHTML文件:JSF PrimeFaces 6.1 p:gmap不使用Google地圖渲染多段線

<?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:p="http://primefaces.org/ui" xmlns:f="http://xmlns.jcp.org/jsf/core"> 
<h:head> 
    <title>Facelet Title</title> 
    <script src="https://maps.google.com/maps/api/js?key=SOME_KEY" defer="defer" 
      type="text/javascript"></script> 
<h:outputScript library="primefaces" name="gmap/gmap.js" /> 
</h:head> 
<h:body> 
    <f:view contentType="text/html"> 
     <h:form id="form1"> 
      <p:gmap center="36.883707, 30.689216" zoom="15" type="MAP" style="width:900px;height:800px;" 
        model="#{mapBean.model}" id="myMap"/> 
     </h:form> 
    </f:view> 
</h:body> 
</html> 

,這裏是我的豆

import org.primefaces.model.map.DefaultMapModel; 
import org.primefaces.model.map.LatLng; 
import org.primefaces.model.map.MapModel; 
import org.primefaces.model.map.Polyline; 

import javax.annotation.PostConstruct; 
import javax.faces.bean.ManagedBean; 
import java.io.Serializable; 

@RequestScoped 
@ManagedBean(name = "mapBean") 
public class MapBean implements Serializable { 

    private MapModel model; 

    @PostConstruct 
    public void MapBean() { 
     model = new DefaultMapModel(); 
     Polyline polyline = new Polyline(); 
     polyline.getPaths().add(new LatLng(36.879466, 30.667648)); 
     polyline.getPaths().add(new LatLng(36.883707, 30.689216)); 
     polyline.getPaths().add(new LatLng(36.879703, 30.706707)); 
     polyline.getPaths().add(new LatLng(36.885233, 30.702323)); 

     polyline.setStrokeWeight(8); 
     polyline.setStrokeColor("#FF9900"); 
     polyline.setStrokeOpacity(0.9); 

     model.addOverlay(polyline); 
    } 

    public MapModel getModel() { 
     return this.model; 
    } 
} 

添加到MapBean模型折線沒有得到由P顯示:GMAP屬性。只顯示地圖。我使用Spring Boot 1.2.3運行了Mojarra 2.2.11的primefaces 6.1。任何我可能會遺漏的想法/指針,或者它是p:gmap和折線渲染的真正問題?我還查看了Chrome Javascript控制檯,並且沒有顯示錯誤。

+0

偉大的作品在這裏:HTTPS://www.primefaces .org/showcase/ui/data/gmap/polylines.xhtml找到差異 – Kukeltje

+1

哦,你錯過了你的bean的範圍聲明。並且''在錯誤的地方(它在'h:head之外) – Kukeltje

+0

@Kukeltje我已經完成了更改代碼後編輯與更改)但它仍不呈現多段線。我正在關注您發佈的primefaces鏈接中的示例。你是否能夠嘗試你的結局,讓我們知道它是否有效,或者其他指針會受到讚賞。 –

回答

0

已解決。感謝@Kukeltje的幫助。 看來,當我們使用Spring Framework(我使用SpringBoot 1.2.3來運行這個應用程序)來管理事情時,我們需要使用@Named註釋來爲模型服務的Bean。

下面是我爲它工作所做的更改。

的XHTML保持不變的原代碼後(上圖) bean代碼(其工作是如下)

import org.primefaces.model.map.DefaultMapModel; 
import org.primefaces.model.map.LatLng; 
import org.primefaces.model.map.MapModel; 
import org.primefaces.model.map.Polyline; 

import javax.annotation.PostConstruct; 
import javax.inject.Named; 
import java.io.Serializable; 

@Named("mapBean") 
public class MapBean implements Serializable { 
    public void setModel(MapModel model) { 
     this.model = model; 
    } 

    private MapModel model; 

    @PostConstruct 
    public void MapBean() { 
     model = new DefaultMapModel(); 
     Polyline polyline = new Polyline(); 
     polyline.getPaths().add(new LatLng(36.879466, 30.667648)); 
     polyline.getPaths().add(new LatLng(36.883707, 30.689216)); 
     polyline.getPaths().add(new LatLng(36.879703, 30.706707)); 
     polyline.getPaths().add(new LatLng(36.885233, 30.702323)); 
     polyline.setStrokeWeight(8); 
     polyline.setStrokeColor("#FF9900"); 
     polyline.setStrokeOpacity(0.9); 
     model.addOverlay(polyline); 
    } 
    public MapModel getModel() { 
     return this.model; 
    } 
} 

enter image description here