यह कैसे जांचा जाए कि एक फ्रीमर्कर टेम्पलेट में कोई चर मौजूद है या नहीं?


175

मेरे पास एक फ्रीमॉकर टेम्पलेट है जिसमें प्लेसहोल्डर्स का एक समूह है जिसके लिए टेम्प्लेट संसाधित होने पर मानों की आपूर्ति की जाती है। यदि उपयोगकर्ता नाम चर की आपूर्ति की जाती है, तो मैं सशर्त रूप से टेम्पलेट का हिस्सा शामिल करना चाहता हूं:

[#if_exists userName]
  Hi ${userName}, How are you?
[/#if_exists]

हालाँकि, FreeMarker मैनुअल से संकेत मिलता है कि if_exists पदावनत है, लेकिन मुझे इसे प्राप्त करने का दूसरा तरीका नहीं मिल रहा है। बेशक, मैं एक अतिरिक्त बूलियन चर प्रदान कर सकता है isUserName और इस तरह का उपयोग करें:

[#if isUserName]
  Hi ${userName}, How are you?
[/#if]

लेकिन अगर उपयोगकर्ता नाम मौजूद है, तो यह जांचने का एक तरीका है कि मैं इस अतिरिक्त चर को जोड़ने से बच सकता हूं।

जवाबों:


304

यह जाँचने के लिए कि क्या मान मौजूद है:

[#if userName??]
   Hi ${userName}, How are you?
[/#if]

या मानक फ्रीमार्कर सिंटैक्स के साथ:

<#if userName??>
   Hi ${userName}, How are you?
</#if>

यह जाँचने के लिए कि क्या मान मौजूद है और खाली नहीं है:

<#if userName?has_content>
    Hi ${userName}, How are you?
</#if>

1
यदि किसी अन्य व्यक्ति द्वारा इसे फेंक दिया गया हो, तो #if सिंटैक्स को कोष्ठक की बजाय वर्णों से कम और अधिक से अधिक घिरा होना चाहिए। उदाहरण के लिए: <#if userName ??>
कैमरन

इस सिंटैक्स का उपयोग करना वास्तव में संभव है, इसलिए मैंने सिर्फ इस प्रश्न के सिंटैक्स का पालन किया: देखें freemarker.sourceforge.net/docs/…
Ulf

10
यह केवल जाँचता है कि क्या var मौजूद है। लेकिन अगर आपके पास "userName" में एक खाली स्ट्रिंग है, तो <#if userName ??> सच हो जाएगा !! इस मुद्दे को हल करने के लिए इस पृष्ठ पर @ user1546081 उत्तर देखें।
एड्रिएन बी

94

यह एक बेहतर फिट लगता है:

<#if userName?has_content>
... do something
</#if>

http://freemarker.sourceforge.net/docs/ref_builtins_expert.html


2
यह जांचने के लिए लगता है कि क्या संस्करण मौजूद है और यदि इसकी सामग्री शून्य या रिक्त नहीं है (यहां रिक्त स्ट्रिंग्स का उल्लेख करते हुए)।
एड्रिन बी

4
इसे कम करना होगा क्योंकि यह तकनीकी रूप से गलत है और इससे अनायास ही (गलत नकारात्मक) व्यवहार हो जाएगा यदि चर मौजूद है (क्या ऑप के लिए जाँच करना चाहता था) लेकिन खाली है।
मदब्रिक्स

65

इसके अलावा मुझे लगता है कि if_exists का उपयोग किया गया था:

Hi ${userName?if_exists}, How are you?

यदि उपयोगकर्ता नाम अशक्त नहीं होगा, तो परिणाम शून्य होगा:

Hi , How are you?

if_exists अब पदावनत हो गया है और उसे डिफ़ॉल्ट ऑपरेटर से बदल दिया गया है! जैसे की

Hi ${userName!}, How are you?

डिफ़ॉल्ट ऑपरेटर भी एक डिफ़ॉल्ट मान का समर्थन करता है, जैसे:

Hi ${userName!"John Doe"}, How are you?

1
बूलियन का मूल्यांकन करने के लिए डिफ़ॉल्ट मान ऑपरेटर का उपयोग नहीं किया जा सकता है। जैसे, यह एक ifबयान में op अनुरोध के रूप में इस्तेमाल नहीं किया जा सकता है ।
मैडब्रेक्स

5

मुझे लगता है कि बहुत से लोग यह देखने में सक्षम होना चाहते हैं कि क्या उनका चर खाली नहीं है और साथ ही साथ मौजूद है। मुझे लगता है कि अस्तित्व और शून्यता की जाँच बहुत सारे मामलों में एक अच्छा विचार है, और यह आपके टेम्पलेट को और अधिक मजबूत बनाता है और मूर्खतापूर्ण त्रुटियों की संभावना कम करता है। दूसरे शब्दों में, यदि आप यह सुनिश्चित करने के लिए जांच करते हैं कि आपका चर उपयोग करने से पहले रिक्त नहीं है और खाली नहीं है, तो आपका टेम्पलेट अधिक लचीला हो जाता है, क्योंकि आप इसमें एक अशक्त चर या खाली स्ट्रिंग फेंक सकते हैं, और यह उसी तरह काम करेगा किसी भी स्थिति में।

<#if p?? && p?has_content>1</#if>

मान लीजिए कि आप यह सुनिश्चित करना चाहते हैं कि यह pसिर्फ व्हाट्सएप से अधिक है। फिर आप यह देखने के लिए जाँच करने से पहले ट्रिम कर सकते हैं कि क्या यह has_content

<#if p?? && p?trim?has_content>1</#if>

अपडेट करें

कृपया मेरे सुझाव को नजरअंदाज करें - has_contentयह सब आवश्यक है, क्योंकि यह खाली चेक के साथ एक अशक्त जांच भी करता है। करना p?? && p?has_contentके बराबर है p?has_content, इसलिए आप बस उपयोग कर सकते हैं has_content


2

FreeMarker 2.3.7 के पिछले संस्करणों के लिए

आप ??लापता मानों को संभालने के लिए उपयोग नहीं कर सकते हैं, पुराना वाक्यविन्यास है:

<#if userName?exists>
   Hi ${userName}, How are you?
</#if>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.