2013-01-17 17 views
5

मैं विभिन्न पुस्तकालयों को देख रहा हूं जिनका उपयोग मेरे प्रोजेक्ट में एक टेम्पलेटिंग इंजन के रूप में किया जा सकता है और अभी अपाचे वेग एक अच्छे उम्मीदवार की तरह दिखता है। मेरे उपयोग के बारे में निम्नलिखित संदेह हैं:Velocity टेम्पलेट्स के अंदर डेटाबेस प्रश्नों को परिभाषित करना

क्या एक टेम्पलेट में SQL डेटाबेस क्वेरी निर्दिष्ट करना और पैरामीटर भरने के लिए क्वेरी के वापसी मूल्य का उपयोग करना संभव है? मुझे वेग उपयोगकर्ता मार्गदर्शिका में निम्नलिखित उदाहरण मिला:

Hello, 

#set($result = $query.criteria("name")) 
Your username is $result. 

हालांकि मार्गदर्शिका SQL क्वेरी निष्पादित करने के बारे में बहुत कुछ नहीं बताती है। क्या एक SQL SELECT क्वेरी को परिभाषित करना संभव है जो मान देता है और इस मान को टेम्पलेट में एक चर के लिए असाइन करता है? मैं सोच रहा हूं कि नीचे दिए गए उदाहरण की तरह कुछ संभव है? अगर आप इस पर कुछ प्रकाश डाला सकता है

Hello, 

#set($result = $executeQuery("SELECT name FROM user")) 
Your username is $result. 

आभारी होंगे। कोई भी उदाहरण प्रदान करने के लिए पर्याप्त है, या मुझे उस स्थान पर इंगित करें जहां मुझे इस पर अतिरिक्त दस्तावेज मिल सकते हैं?

उत्तर

3

मैं को देखने के लिए चाहते हो सकता है सीधे एम्बेडिंग क्वेरी के बजाय http://velosurf.sourceforge.net/ जैसे कुछ की अनुशंसा करेंगे।

0

यह निम्नलिखित HQL के लिए है

जनरल उदाहरण किसी क्वेरी के पहले 5 परिणाम प्रदर्शित करने के लिए कैसे दिखा (आप उदाहरण के रूप में इस का उपयोग करते हुए अन्य लोगों के साथ की कोशिश कर सकते):

#set($hql = "<query here>") 
#set($results = $xwiki.searchDocuments($hql, 5, 0)) 
#foreach ($item in $results) 
* $item 
#end 

उदाहरण नीचे आपको विभिन्न एचक्यूएल प्रश्न दिखाएंगे जिन्हें आप लिख सकते हैं। सरल क्वेरी

प्रदर्शित करता है सभी दस्तावेजों जो उपयोगकर्ता द्वारा बनाया गया है XWiki.JohnDoe

#set($hql = "where doc.creator='XWiki.JohnDoe'") 

Additonal जानकारी

आप इस link

+0

आपके उत्तर के लिए धन्यवाद।कोई विचार अगर मैं यहां एक एसक्यूएल क्वेरी निष्पादित कर सकता हूं? यदि संभव हो, तो मुझे डेटाबेस प्रमाण-पत्र और कनेक्टर जानकारी कहां कॉन्फ़िगर करनी चाहिए? मुझे पता है कि मैं DataSourceResourceLoader का उपयोग कर डेटाबेस से टेम्पलेट्स ला सकता हूं। लेकिन क्या एसक्यूएल प्रश्नों को निष्पादित करना और टेम्पलेट के अंदर मूल्य प्राप्त करना संभव है? अग्रिम में धन्यवाद। –

+0

यह एक्सडिकी से जुड़ा हुआ है, डिफ़ॉल्ट रूप से स्टैंडअलोन वेग में '$ xwiki' ऑब्जेक्ट नहीं है। –

2

वेग, एक बहुत ही हल्के templating इंजन है यह अपने आप में बहुत कम कार्यक्षमता है। यह एक टेम्पलेट फ़ाइल में संदर्भ में interpolating वैरिएबल परिभाषित (आपके द्वारा) द्वारा काम करता है। डिफ़ॉल्ट रूप से, संदर्भ खाली है, जिसका अर्थ है कि टेम्पलेट का उपयोग करने के लिए कोई चर नहीं है। वेग कस्टम कक्षाओं की नई वस्तुओं instantiating की अनुमति नहीं है, यह सब आप उपयोग करना है स्ट्रिंग और संख्या शाब्दिक, प्लस नक्शे और सूचियों की अनुमति देता है:

#set ($n = 5) 
#set ($s = 'Hello New World!') 
#set ($m = {'four' : 4, 'five' : $n}) 
#set ($a = ['x', 'y', 'z']) 

आप संदर्भ को आबाद करने से वेग "स्मार्ट" बनाने के लिए जिम्मेदार हैं इंटरपोलिंग से पहले उपयोगी वस्तुओं के साथ। शुरुआती बिंदु के रूप में, आप Velocity Tools में से कुछ का उपयोग कर सकते हैं। आप अपने स्वयं के टूल्स जोड़ सकते हैं, जैसे SQL टूल जो आपको क्वेरी चलाने देता है। या आप higher level framework that uses velocity का उपयोग कर सकते हैं और जो पहले से ही टेम्पलेट्स में उपलब्ध उपकरणों का समृद्ध सेट प्रदान करता है।

तो, अपने प्रश्न का उत्तर देने के लिए, आप किसी भी SQL कथन को निष्पादित कर सकते हैं, जब तक आप संदर्भ में किसी ऑब्जेक्ट को जोड़ते हैं जो ऐसे कथन निष्पादित कर सकता है। आपको developer guide में वेग का सही तरीके से उपयोग करने के बारे में और अधिक पढ़ना चाहिए।

संबंधित मुद्दे