ドラッグされたマーカーの更新された場所を表示するために使用する Bean があります。これが私のコードです:
@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 を、ユーザーに入力してもらいたいフォームで使用します。ユーザーはフォームに入力し、マーカーを目的の場所にドラッグして、情報を保存します。これは、情報をデータベースに保存する他の 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があります:
<h:outputLabel value="Proje Adı: " />
<p:inputTextarea value="#{addProjectToDB.projectName}" id="projectName" autoResize="true"/>
<h:outputLabel value="Proje Detayı: " />
<p:inputTextarea value="#{addProjectToDB.projectExp}" id="projectExp" autoResize="true"/>
<h:outputLabel value="Proje Koordinatları: " />
<h:inputHidden value="#{addProjectToDB.projectCoordLat}" id="lat" />
<h:inputHidden value="#{addProjectToDB.projectCoordLong}" id="lon" />
<h:form>
<p:growl id="growl" showDetail="true"/>
<script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>
<p:gmap center="41.017599,28.985704" zoom="13" type="HYBRID" model="#{markerLocationer.draggableModel}" style="width:600px;height:400px">
<p:ajax event="markerDrag" listener="#{markerLocationer.onMarkerDrag}" update="growl"/>
</p:gmap>
</h:form>
<p:commandButton value="Projeyi Kaydet" icon="ui-icon-disk" action="#{addProjectToDB.Save}" oncomplete="infDialog.show()" />
私の問題は、フォームを保存しようとすると、場所がnullになることです。ただし、マーカーをドラッグすると、ロングとラティが表示されます。MarkerLocationer Bean から long と lati を正しく取得するにはどうすればよいですか? 前もって感謝します。
わかった。解決策を見つけました。これが私が基本的に行った方法です:
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());