2008-11-20 14 views
135

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

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

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

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

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

उत्तर

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

या मानक freemarker वाक्य रचना के साथ:

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

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

+0

इस वाक्यविन्यास का उपयोग करना वास्तव में संभव है, इसलिए मैंने अभी प्रश्न के वाक्यविन्यास का पालन किया: http://freemarker.sourceforge.net/docs/dgui_misc_alternativesyntax.html –

+9

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

55

इसके अलावा, मैं if_exists लगता है की तरह इस्तेमाल किया गया था:

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

जो अगर userName रिक्त है तोड़ने नहीं होगा, परिणाम अगर शून्य होगा:

Hi , How are you? 

if_exists अब बहिष्कृत है और इसे डिफ़ॉल्ट ऑपरेटर के साथ बदल दिया गया है!

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

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

+12

अजीब वाक्यविन्यास ... – skaffman

+0

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

84

यह एक लगता है एक बेहतर फिट होने के लिए: डिफ़ॉल्ट ऑपरेटर भी इस तरह के रूप में एक डिफ़ॉल्ट मान, का समर्थन करता है

Hi ${userName!}, How are you? 

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

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

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

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

अद्यतन

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

+2

यह जांचने के लिए लगता है कि var मौजूद है या नहीं और यदि इसकी सामग्री शून्य या खाली नहीं है (यहां खाली स्ट्रिंग का जिक्र है)। –

+4

इसे डाउनवोट करना है क्योंकि यह तकनीकी रूप से गलत है और यदि वेरिएबल * मौजूद है * (कौन सा ऑप देखना चाहता था) लेकिन खाली है तो अनपेक्षित (झूठी नकारात्मक) व्यवहार का कारण बन जाएगा। – Madbreaks

2

मैं:

Hi ${userName!"John Doe"}, How are you? 
संबंधित मुद्दे