【发布时间】:2014-07-03 15:42:30
【问题描述】:
我想将geocoder地址从谷歌地图传给ManagedBean,但是我必须在地图上选择两次,我想是因为方法(onPointSelect)是在地址传给ManagedBean之前执行的
托管豆:
private String mapAddress;
public void onPointSelect(PointSelectEvent event) {
LatLng latlng = event.getLatLng();
setMapAddress(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("myForm:address"));
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Point Selected", "Lat:" + latlng.getLat() + ", Lng:" + latlng.getLng() + " Address: " + getMapAddress()));
}
XHTML:
<h:form id="myForm" >
<p:growl id="messages" showDetail="true" life="2000" />
<p:gmap center="41.381542, 2.122893" zoom="15" type="ROADMAP" widgetVar="map" style="width:600px;height:400px" onPointClick="handlePointClick(event);" >
<p:ajax event="stateChange" listener="#{test.onStateChange}" />
<p:ajax event="pointSelect" listener="#{test.onPointSelect}" update="messages" />
</p:gmap>
<h:inputHidden id="address" value="#{test.mapAddress}"/>
</h:form>
<script type="text/javascript" >
//var ma = document.getElementById('myForm:address');
function handlePointClick(event) {
if (navigator.geolocation)
{
browserSupportFlag = true;
var latlng = event.latLng;
geocoder = new google.maps.Geocoder();
geocoder.geocode({'latLng': latlng}, function(results, status)
{
if (status === google.maps.GeocoderStatus.OK)
{
//alert( results[0].formatted_address );
document.getElementById('myForm:address').value = results[0].formatted_address;
//jQuery("#address").val(results[0].formatted_address);
//jQuery("#addressBtn").click();
//alert( document.getElementById('myForm:address').value );
}
});
}
}
</script>
【问题讨论】:
标签: javascript google-maps jsf primefaces