Помещение долготы и широт в текстовое поле с помощью Gmap - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь получить долготу и широту, где я щелкаю мышью на карте Google.Как я могу это сделать?

Я использовал EventView Primefaces, который я рекомендую в соответствии с моим проектом, и вызвал его метод со страницы JSF

Моя страница xhtml

<h:form>

<p:inputText value="#{userAddPlaceBean.place.placeName}" id="name">Place Name </p:inputText>

 <p:inputText value="#{userAddPlaceBean.place.lng}" id="lng"> Longitude </p:inputText>

<p:inputText value="#{userAddPlaceBean.place.lat}" id="lat"> Latitude </p:inputText>

 <p:commandButton action="#{userAddPlaceBean.addPlace()}" value="Add Place"></p:commandButton>

    <p:gmap id="gmap" center="41, 29" zoom="8" type="ROADMAP" style="width:100%;height:400px">

  <p:ajax event="pointSelect" listener="#{eventView.onPointSelect}" update="lng, lat" />

    </p:gmap>

</h:form>

MyКласс EventView:

@ManagedBean
@ViewScoped
public class EventView {
    private double lat=0;
    private double lng=0;


     public void onStateChange(StateChangeEvent event) {
            LatLngBounds bounds = event.getBounds();
            int zoomLevel = event.getZoomLevel();

            addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Zoom Level", String.valueOf(zoomLevel)));
            addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Center", event.getCenter().toString()));
            addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "NorthEast", bounds.getNorthEast().toString()));
            addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "SouthWest", bounds.getSouthWest().toString()));
        }

        public void onPointSelect(PointSelectEvent event) {
            LatLng latlng = event.getLatLng();
            this.lat =   latlng.getLat();
             this.lng= latlng.getLng();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Point Selected", "Lat:" + latlng.getLat() + ", Lng:" + latlng.getLng()));

        }

        public void addMessage(FacesMessage message) {
            FacesContext.getCurrentInstance().addMessage(null, message);
        }

        public double getLat() {
            return lat;
        }

        public void setLat(double lat) {
            this.lat = lat;
        }

        public double getLng() {
            return lng;
        }

        public void setLng(double lng) {
            this.lng = lng;
        }

В результате, когда я нажимаю на название текстового поля карты, долгота и широта увеличиваются как долгота-долгота-долгота ...

Страница результата: enter image description here

1 Ответ

0 голосов
/ 16 мая 2019

У вас есть текст внутри p:inputText.

<p:inputText value="#{userAddPlaceBean.place.placeName}" id="name">Place Name </p:inputText>

<p:inputText value="#{userAddPlaceBean.place.lng}" id="lng"> Longitude </p:inputText>

<p:inputText value="#{userAddPlaceBean.place.lat}" id="lat"> Latitude </p:inputText>

Это не то, что поддерживается. Если вы посмотрите на сгенерированный на стороне клиента html, вы, скорее всего, увидите что-то вроде

<input id="....." />Longitude

Это означает, что текст "Долгота" отображается вне ввода. Когда ввод обновляется, обновляется только <input id="..."/> (JSF обновляет html на основе идентификатора), и текст «Долгота» остается на месте. Поскольку серверная сторона p:inputText снова отображается как <input id="....." />Longitude, вы видите дублированную «Долготу»

<input id="....." />LongitudeLongitude

Это фактически делает ваш вопрос совершенно не связанным с картами (вы могли бы проверить его со статическими значениями в бине без карты). Эффективно сузить вашу проблему, создав [mcve]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...