जब कोई इंटरनेट कनेक्शन, मेरे यूजर इंटरफेस पूरी तरह से अवरुद्ध हो
है
यह एक जावास्क्रिप्ट त्रुटि के कारण होता है। जब आप ब्राउज़र के डेवलपर टूलसेट में जावास्क्रिप्ट कंसोल की जांच करते हैं तो आप इसे देख सकते हैं। इसे देखने के लिए क्रोम/एफएफ 23 +/आईई 9 + में एफ 12 दबाएं।
Uncaught ReferenceError: google is not defined
क्रोम में, आप एक स्टैक ट्रेस प्रकट कर सकते हैं। आप पहली पंक्ति क्लिक करते हैं, यह के रूप में नीचे दिखाया गया है HTML स्रोत में <p:gmap>
द्वारा उत्पन्न स्क्रिप्ट को संदर्भित करता है (सफेद स्थान को मैन्युअल रूप से पठनीयता के लिए डाला):
<script id="geoGmap_s" type="text/javascript">
$(function() {
PrimeFaces.cw('GMap', 'geoMap', {
id: 'geoGmap',
mapTypeId: google.maps.MapTypeId.ROADMAP, // <-- Here,
center:new google.maps.LatLng(...), // <-- and here.
...
});
});
</script>
देखो, इस इनलाइन स्क्रिप्ट चर google
है जो भिन्नता के लिए कोशिश कर रहा है Google मानचित्र API जावास्क्रिप्ट फ़ाइल द्वारा विंडो स्कोप में रखा जाना चाहिए। हालांकि, जब कोई इंटरनेट कनेक्शन नहीं होता है, तो वह Google मानचित्र API जावास्क्रिप्ट फ़ाइल लोड करने में विफल रहता है और इसलिए विंडो स्कोप में कोई google
चर नहीं होगा और इसलिए यह <p:gmap>
-जनरेटेड स्क्रिप्ट एक त्रुटि फेंक देगी जिसमें कहा गया है कि परिवर्तनीय google
अपरिभाषित है।
जब जावास्क्रिप्ट संदर्भ में एक अनचाहे त्रुटि होती है, तो जावास्क्रिप्ट निष्पादन कुल रुक जाएगा। दूसरे शब्दों में, शेष स्क्रिप्ट, जैसे कि अन्य प्राइमफ़ेस उपयोगकर्ता इंटरफ़ेस घटकों के लिए, जिनकी कार्यक्षमता जावास्क्रिप्ट पर अत्यधिक निर्भर करती है, को निष्पादित नहीं किया जाएगा। इससे आपका अवलोकन "मेरा यूजर इंटरफेस पूरी तरह से अवरुद्ध हो जाता है" का अवलोकन करता है।
तकनीकी रूप से, समाधान सीधे आगे है: <p:gmap>
उस स्क्रिप्ट को निष्पादित करने का प्रयास नहीं करना चाहिए जब परिवर्तनीय google
विंडो स्कोप में नहीं है।
public class YourGMapRenderer extends GMapRenderer {
@Override
protected void startScript(ResponseWriter writer, String clientId) throws IOException {
super.startScript(writer, clientId);
writer.write("if(window.google)");
}
}
आदेश इसे चलाने के लिए पाने के लिए, यह रजिस्टर:
आदेश है कि प्राप्त करने के लिए, आप <p:gmap>
की रेंडरर, GMapRenderer
विस्तार करने के लिए, एक if (window.google)
लिखने के लिए सीधे स्क्रिप्ट के शुरू करने के बाद की जरूरत है के रूप में faces-config.xml
जहां <renderer-class>
अपने विस्तारित रेंडरर वर्ग के FQN का प्रतिनिधित्व करता है में नीचे:
<render-kit>
<renderer>
<component-family>org.primefaces.component</component-family>
<renderer-type>org.primefaces.component.GMapRenderer</renderer-type>
<renderer-class>com.example.YourGMapRenderer</renderer-class>
</renderer>
</render-kit>
एक बार स्थापित है, यह नीचे के रूप में प्रदान की गई स्क्रिप्ट बदल जाएगा:
<script id="geoGmap_s" type="text/javascript">
if (window.google) $(function() {
PrimeFaces.cw('GMap', 'geoMap', {
...
});
});
</script>
दूसरे शब्दों में, समारोह केवल, जब window.google
truthy है लागू किए जाएंगे, यानी जब google
चर जावास्क्रिप्ट की खिड़की दायरे में उपलब्ध है।
जो जेएस त्रुटि से बचने और जेएस निष्पादन जारी रखने देना चाहिए।
आपके उपयोगकर्ता आपके एप्लिकेशन तक कैसे पहुंचते हैं? क्या यह इंट्रानेट पर है? –
उपयोगकर्ता एंटरप्राइज़ नेटवर्क –
के माध्यम से एप्लिकेशन तक पहुंचते हैं क्या आपका एप्लिकेशन उसी नेटवर्क से होस्ट किया गया है? –