2012-03-22 14 views
9

मैं अपने जीवन शैली के लिए वेग टेम्पलेट्स लिख रहा हूं और मुझे आश्चर्य है कि क्या वेग टेम्पलेट के अंदर एक नई वस्तु बनाना संभव है।वेग टेम्पलेट में ऑब्जेक्ट बनाएं

कारण यह है कि जीवन में कोई संदर्भ नहीं है नियम संदर्भ में पंजीकृत है और मैं वास्तव में किसी दिए गए समय में टेम्पलेट में मौजूद चर का निरीक्षण करने में सक्षम होना चाहता हूं। इसके लिए एक अच्छा मैक्रो है, लेकिन दुर्भाग्य से यह contexttool का उपयोग करता है।

#set($contextTool = new ContextTool()) 

एक अन्य समाधान जावा कोड है कि उस टेम्पलेट संदर्भ में सामान जोड़ने में सक्षम है Liferay विषय के साथ प्रदान की जाती है होगा:

मैं की तरह कुछ करने के लिए करना चाहते हैं। लेकिन मैं नहीं पता है कि यह कैसे काम करेगा या तो ... ;-)

उत्तर

8

अगर मैं तुम्हें समझ में आ से आप यही चाहते आप देना चाहिए

#set($contextTool = $portal.getClass().forName("full.package.ContextTool").newInstance()) 

संपादित

के साथ प्रयास करें

#set($ve = $serviceLocator.findService("com.liferay.portal.kernel.velocity.VelocityEngine")) 
#set($wvc = $ve.getWrappedStandardToolsContext().getWrappedVelocityContext()) 

#set($cVE = $portal.getClass().forName("org.apache.velocity.app.VelocityEngine")) 
#set($cHSREQ = $portal.getClass().forName("javax.servlet.http.HttpServletRequest")) 
#set($cHSRES = $portal.getClass().forName("javax.servlet.http.HttpServletResponse")) 
#set($cSC = $portal.getClass().forName("javax.servlet.ServletContext")) 
#set($cCC = $portal.getClass().forName("org.apache.velocity.tools.view.context.ChainedContext")) 
#set($cVEI = $portal.getClass().forName("com.liferay.portal.velocity.VelocityEngineImpl")) 
#set($cC = $portal.getClass().forName("org.apache.velocity.context.Context")) 
#set($cVEU = $portal.getClass().forName("com.liferay.portal.kernel.velocity.VelocityEngineUtil")) 

#set($ve = $cVEU.getMethod("getVelocityEngine").invoke(null)) 

#set($fVE = $cVEI.getDeclaredField("_velocityEngine")) 
$fVE.setAccessible(true) 

#set($cc = $cCC.getConstructor($cC, $cVE, $cHSREQ, $cHSRES, $cSC).newInstance($wvc, $fVE.get($ve), $request, $response, $request.getSession().getServletContext())) 

#set($contextTool = $portal.getClass().forName("org.apache.velocity.tools.view.tools.ContextTool").newInstance()) 

$contextTool.init($cc) 

के बाद कि आप उदाहरण के लिए, का उपयोग कर सकते

$contextTool.getKeys() 

यदि आपको यह नहीं चाहिए, तो मुझे बताएं ...

+0

ठीक है, आप सही हैं। संदर्भ टूल बनाया गया है! :-) लेकिन मैं इसे ठीक से शुरू करने के लिए टेम्पलेट के अंदर दृश्य संदर्भ तक नहीं पहुंच सकता :-( –

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