फ्रीलाकर में शून्य मानों को संभालना


82

nullफ्रीमार्कर में मूल्यों को कैसे संभालें? nullडेटा में मान मौजूद होने पर मुझे टेम्पलेट में कुछ अपवाद मिलते हैं।


संभावित डुप्लिकेट: stackoverflow.com/questions/306732/…
काउल्स

जवाबों:


98

आप ??परीक्षण ऑपरेटर का उपयोग कर सकते हैं :

यह जाँचता है कि क्या वस्तु का गुण शून्य नहीं है:

<#if object.attribute??></#if>

यह जाँचता है कि क्या वस्तु या विशेषता शून्य नहीं है:

<#if (object.attribute)??></#if>

स्रोत: फ्रीमार्कर मैनुअल


1
इस दृष्टिकोण और has_content के बीच क्या अंतर है ??
आनंद बी

3
has_content, शून्य-जाँच के लिए, यह भी जाँचता है कि क्या मान रिक्त नहीं है। यह स्ट्रिंग्स, सीक्वेंस, हैश या कलेक्शन के लिए काम करता है। यदि ऑब्जेक्ट एक तारीख, बूलियन या एक संख्या है, तो यह गैर-खाली के रूप में कार्य करता है। अन्य सभी प्रकारों के लिए यह खाली के रूप में कार्य करेगा।
टॉम वेरलस्ट

मुझे यह समस्या है जहाँ मुझे जाँच करनी है कि क्या बीन में मूल्य शून्य है। मैंने निम्नलिखित कोशिश की: $ {checknull (Bean.getValue ())}, जहाँ checknull यदि कोई फ़ंक्शन <#function checknull x: # #if x? ?> <#return ""> <#else> <#return x> </ # अगर> </ # फ़ंक्शन> है, लेकिन मुझे "त्रुटि निष्पादित मैक्रो: चेकनल आवश्यक पैरामीटर: x निर्दिष्ट नहीं है।" त्रुटि
आनंद बी

आपको रिटर्न रिवर्स करना होगा: <#function चेकनॉल x> <#if x ??> <#return x> <#else> <#return ""> </ # अगर> </ # फ़ंक्शन>
टॉम वेरेलस्ट

1
कृपया नीचे दिए गए उत्तर की जांच करें: stackoverflow.com/a/27614219/3002336
आनंद वर्की फिलिप्स

106

2.3.7 से फ्रीडमर से शुरू, आप इस सिंटैक्स का उपयोग कर सकते हैं :

${(object.attribute)!}

या, यदि आप गुण होने पर डिफ़ॉल्ट पाठ प्रदर्शित करना चाहते हैं null:

${(object.attribute)!"default text"}

1
उन लोगों के लिए जो XDocReport के लिए टेम्पलेट इंजन के रूप में फ्रीमार्क का उपयोग कर रहे हैं, यह <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.22</version></dependency>आपके pom.xml को जोड़ने के बाद काम कर रहा है ।
लुडोविक गुइल्यूम

यदि आपके पास कोई दिनांक है और दिनांक शून्य हो सकती है, तो आप इसे कैसे करते हैं? दूसरे शब्दों में object.dateAcquired जहाँ dateAcquired शून्य हो सकता है और आपके पास $ {object.datecquired? Date}
Stephane Grenier

1
@ स्टेफेनग्रेनियर उपयोग${(object.dateAcquired?date)!"not present"}
टासोस बैसकॉस 20

1
महान उदाहरण है। एक बहुत मदद की। ब्रैकेट, हालांकि, मोटे हैं। ${salutation!'Dear Mr. or Mrs.'}
Sim0rn

कोई भी विचार कि मैं कैसे प्रिंट कर सकता हूं?
सैंटियागो Aceñolaza

4

मुझे लगता है कि यह दूसरे तरीके से काम करता है

<#if object.attribute??>
   Do whatever you want....
</#if>

यदि object.attributeNULL नहीं है, तो सामग्री मुद्रित की जाएगी।


1

??अपने <#if>बयान के अंत में ऑपरेटर का उपयोग करें ।

यह उदाहरण दर्शाता है कि nullएक फ्रीमेकर टेम्पलेट में दो सूचियों के मानों को कैसे संभालना है ।

List of cars:
<#if cars??>
    <#list cars as car>${car.owner};</#list>
</#if>
List of motocycles:
<#if motocycles??>
    <#list motocycles as motocycle>${motocycle.owner};</#list>
</#if>

-3

यदि आपके पास वैकल्पिक में बदलने के लिए बहुत सारे चर हैं, तो आप इसके साथ SubimeText का उपयोग कर सकते हैं:

Find: \${([A-Za-z_0-9]*)}
Replace: \$\{${1}!\}

सुनिश्चित करें कि regex और केस-संवेदी विकल्प सक्षम हैं:

उदात्त regex की जगह

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.