दिलचस्प पोस्ट
उद्देश्य-सी: फॉरवर्ड क्लास डिक्लेरेशन वेबकैट / ब्लिंक में मैक ओएस ट्रैपैड उपयोगकर्ताओं के लिए छिपे हुए स्क्रॉल सलाखों को रोकना क्या आप कभी जावा में वाष्पशील कीवर्ड का उपयोग करते हैं? असंगत यूनिकोड इमोजी ग्लिफ़्स / प्रतीक अजगर 2.7 के लिए स्मृति पुस्तकालय AngularJS: एसिंक्रोनस फ़िल्टर प्रारंभ करें मैं अपने .net असेंबलियों को अपव्यय से कैसे बचा सकता हूं? पायथन: अपने ऑपरेटरों को परिभाषित? एंड्रॉइड वेबव्यू, ब्राउज़र खोलने के बजाय ऐप में रीडायरेक्ट कैसे प्रबंधित करें मैं एक PHP-unsaryialize jQuery-serialized प्रपत्र कैसे कर सकता हूँ? आप Windows पर एक वर्चुअल नेटवर्क इंटरफेस कैसे बनाते हैं? कैसे एंड्रॉइड गैलरी में छवि को बचाने के लिए सी # में सिंगलटन क्या है? FindViewById () लेआउट XML में कस्टम घटक के लिए शून्य प्रदान करता है, अन्य घटकों के लिए नहीं सी # के बराबर है ना एनएएन या इज़न्यूमेरिक?

फ्रीमार्नर ने हैशप कुंजी पर फिर से चलना

Freemarker के पास दो संग्रह डेटाटाइप, सूचियां और हैशप हैं क्या हमहैप कुंजी पर पुनरावृत्त करने का एक तरीका है जैसे कि हम सूचियों के साथ करते हैं?

तो अगर मेरे पास डाटा के साथ एक var है तो कहें:

user : { name : "user" email : "looser@everything.com" homepage : "http://nosuchpage.org" } 

मैं सभी उपयोगकर्ता के गुणों को उनके मूल्य के साथ प्रिंट करना चाहूंगा यह अमान्य है, लेकिन लक्ष्य स्पष्ट है:

 <#list user.props() as prop> ${prop} = ${user.get(prop)} </#list> 

वेब के समाधान से एकत्रित समाधान "फ्रीमार्नर ने हैशप कुंजी पर फिर से चलना"

संपादित करें: अब इस समाधान का उपयोग न करें, खासकर नहीं। अन्य उत्तर देखें

आप अंतर्निहित कुंजी फ़ंक्शन का उपयोग करते हैं, जैसे यह काम करना चाहिए:

 <#list user?keys as prop> ${prop} = ${user.get(prop)} </#list> 

एफवाईआई, ऐसा लगता है कि मूल्यों को प्राप्त करने के लिए सिंटैक्स बदल गया है:

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

 <#assign h = {"name":"mouse", "price":50}> <#assign keys = h?keys> <#list keys as key>${key} = ${h[key]}; </#list> 

2.3.25 के बाद से, इसे इस तरह करें:

 <#list user as propName, propValue> ${propName} = ${propValue} </#list> 

ध्यान दें कि यह गैर-स्ट्रिंग कुंजी के साथ भी काम करता है ( map[key] विपरीत, जिसे map?api.get(key) रूप में लिखा जाना चाहिए map?api.get(key) )।

2.3.25 से पहले मानक समाधान था:

 <#list user?keys as prop> ${prop} = ${user[prop]} </#list> 

हालांकि, कुछ वास्तव में पुरानी फ्रीमार्कर एकीकरण एक अजीब कॉन्फ़िगरेशन का उपयोग करते हैं, जहां सार्वजनिक Map विधियां (जैसे कि मिल getClass ) कुंजी के रूप में दिखाई देती हैं ऐसा ही होता है क्योंकि वे एक शुद्ध BeansWrapper ( BeansWrapper बजाय) का उपयोग कर रहे हैं, जिनके simpleMapWrapper संपत्ति false पर छोड़ दी गई थी। आपको ऐसी सेटअप से बचना चाहिए, क्योंकि यह वास्तविक Map प्रविष्टियों के साथ तरीकों को मिक्स करता है। लेकिन अगर आप ऐसे दुर्भाग्यपूर्ण सेटअप में चलाते हैं, तो स्थिति से बचने का तरीका उजागर हुए जावा विधियों का उपयोग कर रहा है, जैसे user.entrySet() , user.get(key) , आदि, और टेम्पलेट भाषा का उपयोग नहीं करना या user[key]

यदि एक्सपोज एसएएफई या एक्सक्लोज़। के एक्सपोजर स्तर के साथ बीन्सड्राफर का इस्तेमाल करते हैं, तो प्रविष्टि सेट को फिर से चलाने के मानक जावा दृष्टिकोण को नियोजित किया जा सकता है:

उदाहरण के लिए, निम्नलिखित फ्रीमार्कर में काम करेगा (कम से कम संस्करण 2.3.1 9):

 <#list map.entrySet() as entry> <input type="hidden" name="${entry.key}" value="${entry.value}" /> </#list> 

स्ट्रैश 2 में, उदाहरण के लिए, बीनड्रेपर का एक विस्तार इस प्रकार की पुनरावृत्ति को अनुमति देने के लिए एक्सपोजर स्तर के साथ प्रयोग किया जाता है।

परावर्तन वस्तुएं

यदि आपकी नक्शा कुंजी एक ऑब्जेक्ट है और एक स्ट्रिंग नहीं है, तो आप Freemarker का उपयोग करके इसे पुनरावृत्त कर सकते हैं।

1) नक्शे को नियंत्रक में एक सूची में कनवर्ट करें:

 List<Map.Entry<myObjectKey, myObjectValue>> convertedMap = new ArrayList(originalMap.entrySet()); 

2) फ्रीमार्कर टेम्प्लेट में नक्शा बदलना, कुंजी में ऑब्जेक्ट तक पहुंचना और मान में ऑब्जेक्ट:

 <#list convertedMap as item> <#assign myObjectKey = item.getKey()/> <#assign myObjectValue = item.getValue()/> [...] </#list> 

आप अपने जावा प्रोग्राम में सेट की गई कुंजी को एक्सेस करने के लिए एक एकल उद्धरण का उपयोग कर सकते हैं।

यदि आप इस तरह जावा में एक मानचित्र सेट करते हैं

 Map<String,Object> hash = new HashMap<String,Object>(); hash.put("firstname", "a"); hash.put("lastname", "b"); Map<String,Object> map = new HashMap<String,Object>(); map.put("hash", hash); 

फिर आप इस तरह Freemarker में 'हैश' के सदस्यों तक पहुंच सकते हैं –

 ${hash['firstname']} ${hash['lastname']} 

आउटपुट:

 a b