在JSF AJAX调用Submit之后,Autocomplete API(GooglePlacesAPI)正在丢失与html元素的绑定?
我已经绑定了一个文本框,它实际上是一个JSF文本框。通过下面的代码,您可以看到我的API与textbox绑定在JSF AJAX调用Submit之后,Autocomplete API(GooglePlacesAPI)正在丢失与html元素的绑定?,jsf,jsf-2,google-places-api,jsf-2.2,Jsf,Jsf 2,Google Places Api,Jsf 2.2,我已经绑定了一个文本框,它实际上是一个JSF文本框。通过下面的代码,您可以看到我的API与textbox绑定 var input =(document.getElementById('address')); var autocomplete = new google.maps.places.Autocomplete(input); autocomplete.bindTo('bounds', map); 当第一次加载JSF页面时,上面的代码可以正常工作,并且在刷新页面时也可以正常工
var input =(document.getElementById('address'));
var autocomplete = new google.maps.places.Autocomplete(input);
autocomplete.bindTo('bounds', map);
当第一次加载JSF页面时,上面的代码可以正常工作,并且在刷新页面时也可以正常工作
但是当我点击表单提交时,自动完成放置API与文本框的绑定丢失了。下面的代码是JSF表单提交
<script
src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=drawing,geometry,places&sensor=false"></script>
<script>
var map;
var geocoder;
function initialize() {
// Specifies the google Map properties
map = new google.maps.Map(document.getElementById('map-canvas'), {
zoom : 4,
center : new google.maps.LatLng(37.5499, -95.5524),
mapTypeId : google.maps.MapTypeId.ROADMAP,
mapTypeControl : false
});
// Allowing to change the Address to GeoCode.
geocoder = new google.maps.Geocoder({});
var options = {
types : [ 'geocode' ],
componentRestrictions : {
country : "us"
}
};
var input = (document.getElementById('address'));
var autocomplete = new google.maps.places.Autocomplete(input, options);
autocomplete.bindTo('bounds', map);
}
// codeAddress()
function codeAddress() {
var address = document.getElementById("address").value;
geocoder.geocode({
'address' : address
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
document.getElementById("lat").value = results[0].geometry.location
.lat();
document.getElementById("lng").value = results[0].geometry.location
.lng();
}
});
}
</script>
<div id="content-01">
<h:form prependId="false">
<div id="panel-Three">
<h:outputLabel value="ENTER ADDRESS"
style="font-size:12px;vertical-align: bottom;" />
<h:inputText style="margin-left: 2px" type="text" id="address" size="40"
onblur="codeAddress()" value="#{GeoCodeRegion.address}"/>
<h:outputLabel value="LATTITUDE : "
style="font-size:12px;vertical-align: bottom;" />
<h:inputText id="lat" value="#{GeoCodeRegion.lattitude}"
style="margin-left: 2px" />
<h:outputLabel value="LONGTITUDE : "
style="font-size:12px;vertical-align: bottom;" />
<h:inputText id="lng" value="#{GeoCodeRegion.longtitude}"
style="margin-left: 2px" />
<br />
<h:commandButton type="submit" value="Submit Value">
<f:ajax listener="#{GeoCodeRegion.passGeoValues()}" event="click"
render="@form" execute="@form"></f:ajax>
</h:commandButton>
<h:panelGroup id="checkStatus">
<h:outputLabel id="responseCheck"
value="#{GeoCodeRegion.responseTextResult}"
style="vertical-align: bottom;" />
</h:panelGroup>
</div>
</h:form>
</div>
var映射;
var地理编码器;
函数初始化(){
//指定google地图属性
map=new google.maps.map(document.getElementById('map-canvas'){
缩放:4,
中心:新google.maps.LatLng(37.5499,-95.5524),
mapTypeId:google.maps.mapTypeId.ROADMAP,
mapTypeControl:false
});
//允许将地址更改为地理编码。
geocoder=newgoogle.maps.geocoder({});
变量选项={
类型:[“地理编码”],
组件限制:{
国家:“美国”
}
};
var输入=(document.getElementById('address');
var autocomplete=new google.maps.places.autocomplete(输入,选项);
autocomplete.bindTo('bounds',map);
}
//代码地址()
函数代码地址(){
var address=document.getElementById(“地址”).value;
地理编码({
“地址”:地址
},功能(结果、状态){
if(status==google.maps.GeocoderStatus.OK){
document.getElementById(“lat”).value=results[0]。geometry.location
.lat();
document.getElementById(“lng”).value=results[0]。geometry.location
.lng();
}
});
}
实际上,这是一个Ajax调用。不知道为什么提交表单后PlacesAPI绑定会丢失。请帮助我并解释发生这种情况的原因。通过提供JSF inputtextautocomplete选项作为false解决了这个问题 代码级更改
<h:inputText style="margin-left: 2px" type="text" autocomplete=false id="address" size="40"
onblur="codeAddress()" value="#{GeoCodeRegion.address}"/>