Sunday, 15 May 2011

javascript - How to validate delayed and based on bean value? -



javascript - How to validate <p:inputText> delayed and based on bean value? -

i have <p:inputtext id="address"> want validation message displayed when <p:inputtext id="validfield"> or referencing backing bean value false. value given codeaddress() , there quite delay in js-function.

<h:form id="addressform"> <p:inputtext id="address" onchange="codeaddress()"/> <p:message id="addressvalidate" for="address" display="text"/> <p:commandbutton value="submit" /> <p:inputtext id="validfield" value="#{addressbean.valid}"/> </h:form>

the js:

var geocoder; var map; var valid = false; var fulladdress = "none"; function initialize() { geocoder = new google.maps.geocoder(); } function codeaddress() { var address = (document.getelementbyid('addressform:address').value + ", germany"); geocoder.geocode({'address' : address},function(results, status) { if (status == google.maps.geocoderstatus.ok) { var latlong = results[0].geometry.location; var latitude = results[0].geometry.location.lat(); var longitude = results[0].geometry.location.lng(); var country, postal_code, locality, street_number, route; (i = 0; < results[0].address_components.length; ++i) { var component = results[0].address_components[i]; if (!locality && component.types.indexof("locality") > -1) locality = component.long_name; else if (!postal_code && component.types.indexof("postal_code") > -1) postal_code = component.long_name; else if (!country && component.types.indexof("country") > -1) country = component.long_name; else if (!street_number && component.types.indexof("street_number") > -1) street_number = component.long_name; else if (!route && component.types.indexof("route") > -1) route = component.long_name; } if (typeof latlong != "undefined" && typeof latitude != "undefined" && typeof longitude != "undefined" && typeof route != "undefined" && typeof street_number != "undefined" && typeof postal_code != "undefined" && typeof locality != "undefined" && typeof country != "undefined"){ valid = true; fulladdress = results[0].formatted_address; } else{ valid=false; fulladdress="none"; }; } else{ valid=false; fulladdress="none"; } }); window.settimeout(sendajaxical, 200); } function sendajaxical(){ // alert(fulladdress + valid); document.getelementbyid('addressform:fulladdress').value = fulladdress; document.getelementbyid('addressform:validfield').value = valid; jsf.ajax.request(this, event, {execute:"@form"}); if(valid){ document.location.href='nextpage.xhtml'; }else{ showvalidation(); } };

the updated js:

var geocoder; var map; function initialize() { geocoder = new google.maps.geocoder(); } function codeaddress() { var address = (document.getelementbyid('addressform:address').value + ", germany"); geocoder.geocode({ 'address' : address }, function(results, status) { if (status == google.maps.geocoderstatus.ok) { var latlong = results[0].geometry.location; var latitude = results[0].geometry.location.lat(); var longitude = results[0].geometry.location.lng(); var country, postal_code, locality, street_number, route; (var = 0; < results[0].address_components.length; ++i) { var component = results[0].address_components[i]; if (!locality && component.types.indexof("locality") > -1) locality = component.long_name; else if (!postal_code && component.types.indexof("postal_code") > -1) postal_code = component.long_name; else if (!country && component.types.indexof("country") > -1) country = component.long_name; else if (!street_number && component.types.indexof("street_number") > -1) street_number = component.long_name; else if (!route && component.types.indexof("route") > -1) route = component.long_name; } if (typeof latlong != "undefined" && typeof latitude != "undefined" && typeof longitude != "undefined" && typeof route != "undefined" && typeof street_number != "undefined" && typeof postal_code != "undefined" && typeof locality != "undefined" && typeof country != "undefined") { sendajaxical(true,results[0].formatted_address); } else { sendajaxical(false,"none"); } } else { sendajaxical(false,"none"); } }); } function sendajaxical(valid,fulladdress) { // alert(fulladdress + valid); document.getelementbyid('addressform:fulladdress').value = fulladdress; document.getelementbyid('addressform:validfield').value = valid; jsf.ajax.request(this, event, { execute : "@form" }); if (valid) { document.location.href = 'nextpage.xhtml'; } }

you should invoke jsf ajax request when geocoder thing finished, not after arbitrary timeout.

change

geocoder.geocode({'address' : address},function(results, status) { if (status == google.maps.geocoderstatus.ok) { // ... } }); window.settimeout(sendajaxical, 200);

by

geocoder.geocode({'address' : address},function(results, status) { if (status == google.maps.geocoderstatus.ok) { // ... sendajaxical(); } });

javascript jsf-2 primefaces

No comments:

Post a Comment