2012-03-22 35 views
9

Hız temposu için hız şablonları yazıyorum ve hız şablonunda yeni bir nesne oluşturmanın mümkün olup olmadığını merak ediyorum.Hız şablonunda nesne oluşturma

Bunun nedeni, liferay'ta bağlamında kayıtlı bir contextTool olmaması ve belirli bir zamanda şablonda bulunan değişkenleri gerçekten incelemek isteyebilmem. Bunun için harika bir makro var ama maalesef contexttool kullanıyor. Şablon bağlamında şeyler eklemek mümkün olduğu liferay teması ile sağlanır java kod olurdu

#set($contextTool = new ContextTool()) 

Başka bir çözüm:

ben böyle bir şey yapmak istiyorum. Ama bu da işe nasıl bilmiyorum ... ;-)

cevap

8

Bunun istediğini vermelidir daha sizi anlamış EĞER

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

DÜZENLEME

ile deneyin

Örneğin, kullanabilirsiniz
#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) 

sonra

$contextTool.getKeys() 

İhtiyacınız olan şey bu değilse, bana bildirin ...

+0

Eh, haklısınız. ContextTool oluşturuldu! :-) Ancak, düzgün bir şekilde başlatmak için şablon içindeki görünüm içeriğine erişemiyorum :-( –