Поверхность gmap получает местоположение

У меня есть компонент, который я использую для отображения обновленного местоположения перетаскиваемого маркера. Вот мой код:

@SessionScoped
@ManagedBean
public class MarkerLocationer implements Serializable {

    private static final long serialVersionUID = 1L;
    private MapModel draggableModel;
    private Marker marker;

    public MarkerLocationer() {
        draggableModel = new DefaultMapModel();

        //Shared coordinates  
        LatLng coord1 = new LatLng(41.017599, 28.985704);


        //Draggable  
        draggableModel.addOverlay(new Marker(coord1, "Projenin olduğu yere sürükleyin."));

        for (Marker marker2 : draggableModel.getMarkers()) {
            marker2.setDraggable(true);
        }
    }

    public Marker getMarker() {
        return marker;
    }

    public void setMarker(Marker marker) {
        this.marker = marker;
    }

    public MapModel getDraggableModel() {
        return draggableModel;
    }
    public String lon, lat;

    public void onMarkerDrag(MarkerDragEvent event) {

        marker = event.getMarker();
        addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Proje lokasyonu belirlendi.", "X:" + marker.getLatlng().getLat() + " Y:" + marker.getLatlng().getLng()));

        lon = String.valueOf(marker.getLatlng().getLng());
        lat = String.valueOf(marker.getLatlng().getLat());


    }


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

Я использую bean-компонент выше в форме, которую я хочу, чтобы пользователь заполнил. Пользователь заполняет форму, перетаскивает маркер в нужное место и сохраняет информацию. Вот мой другой компонент, который сохраняет информацию в базе данных.

 @ManagedBean
@ViewScoped
public class AddProjectToDB {


    String lat = new MarkerLocationer().lat;
    String lon = new MarkerLocationer().lon;


    //genel
    private String projectName, projectExp, projectCoordLong, projectCoordLat;
    /**
     * Creates a new instance of AddProjectToDB
     */
    static private FileHandler fileTxt;
    static private SimpleFormatter formatterTxt;
    int getter;

    public String Save() throws Exception {

            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/projetakip?useUnicode=true&characterEncoding=utf-8", "root", "");
            Statement stmt = con.createStatement();


            String SQL = "insert into `projects`(`id`,`projectName`,`projectExp`,`projectCoordLat`,`projectCoordLon`) values "
                    + "(NULL,'"
                    + projectName + "','"
                    + projectExp + "','"
                    + lat + "','"
                    + lon + "')";
            int Res = stmt.executeUpdate(SQL);
            ResultSet rs = stmt.getGeneratedKeys();
            getter = rs.getInt(1);
            rs.close();
            stmt.close();

        return "0";

    }
}

И вот мой JSF:

  
                              

                              
                              

                            
                            
                            

                            
                                
                                <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>
                                     
                                        
                                        
                                    
    

Моя проблема заключается в том, что когда я пытаюсь сохранить форму, она дает местоположение как null. Однако я вижу длинный и лати, когда я перетаскиваю маркер. Как я могу правильно получить длинный и латинь из компонента MarkerLocationer? Заранее спасибо.


ОК. Я нашел решение. Вот как я в основном это делал:

            FacesContext facesContext = FacesContext.getCurrentInstance();
            Application application = facesContext.getApplication();
            ValueBinding binding = application.createValueBinding("#{markerLocationer}");
            MarkerLocationer userInfo = (MarkerLocationer) binding.getValue(facesContext);
            projectCoordLat = String.valueOf(userInfo.getMarker().getLatlng().getLat());
            projectCoordLong = String.valueOf(userInfo.getMarker().getLatlng().getLng());
0
добавлено отредактировано
Просмотры: 2
nl ja de
я бы рекомендовал сделать это так, как я показал ниже. он более чист, когда вы вводите нужные вам компоненты, вместо того, чтобы искать их в контексте.
добавлено автор fischermatte, источник

1 ответы

Вы можете просто ввести MarkerLocationer в AddProjectToDB и получить оттуда значение. Нет необходимости использовать скрытые поля. Как это:

MarkerLocationer.java (обновлено)

@ManagedBean
@SessionScoped
public class MarkerLocationer implements Serializable {

    private static final long serialVersionUID = 4288587129736579882L;

    private MapModel draggableModel;

    public MarkerLocationer(){
        draggableModel = new DefaultMapModel();

        //Shared coordinates
        LatLng coord1 = new LatLng(41.017599, 28.985704);

        //Draggable
        draggableModel.addOverlay(new Marker(coord1, "Projenin olduğu yere sürükleyin."));

        for (Marker marker : draggableModel.getMarkers()) {
            marker.setDraggable(true);
        }
    }

    public MapModel getDraggableModel() {
        return draggableModel;
    }

    public void setDraggableModel(MapModel draggableModel) {
        this.draggableModel = draggableModel;
    }

    public void onMarkerDrag(MarkerDragEvent event) {
       //since marker's state is already kept in draggableModel you do not necessarily
    }

    public LatLng getMarkerPosition(){
        return draggableModel.getMarkers().get(0).getLatlng();
    }
}

AddProjectToDB.java (обновлено)

@ManagedBean
@ViewScoped
public class AddProjectToDB {

    @ManagedProperty(value = "#{markerLocationer}")
    private MarkerLocationer markerLocationer;

    public void setMarkerLocationer(MarkerLocationer markerLocationer) {
        this.markerLocationer = markerLocationer;
    }

    public void save() {

        double lat = markerLocationer.getMarkerPosition().getLat();
        double lon = markerLocationer.getMarkerPosition().getLng();

        //.. your stuff

    }
}

И страница JSF


    
    <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>
    
        
    
    

1
добавлено
Кажется, это не работает. Это дает мне nullPointerException.
добавлено автор Ali Yucel Akgul, источник
см. мою версию, она работает сейчас. ManagedProperty не был допустимым выражением ценности.
добавлено автор fischermatte, источник