Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JSF AJAX调用Submit之后,Autocomplete API(GooglePlacesAPI)正在丢失与html元素的绑定?_Jsf_Jsf 2_Google Places Api_Jsf 2.2 - Fatal编程技术网

在JSF AJAX调用Submit之后,Autocomplete API(GooglePlacesAPI)正在丢失与html元素的绑定?

在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页面时,上面的代码可以正常工作,并且在刷新页面时也可以正常工

我已经绑定了一个文本框,它实际上是一个JSF文本框。通过下面的代码,您可以看到我的API与textbox绑定

  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&amp;libraries=drawing,geometry,places&amp;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}"/>