2012-03-22 8 views
9

Estoy escribiendo plantillas de velocidad para mi tema liferay y me pregunto si es posible crear un nuevo objeto dentro de la plantilla de velocidad.Crear objeto en plantilla de velocidad

La razón es que en liferay no hay contextTool registrado en el contexto y realmente quiero poder inspeccionar las variables que están presentes en la plantilla en un momento dado. Hay una macro genial para esto, pero desafortunadamente usa la herramienta contexttool.

me gustaría hacer algo como:

#set($contextTool = new ContextTool()) 

Otra solución sería el código de Java que se proporciona con el tema liferay que es capaz de añadir cosas en el contexto de la plantilla. Pero no sé cómo funcionaría bien ... ;-)

Respuesta

8

tratar con

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

EDITAR

SI le he entendido que esto debe darle lo que quiere

#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) 

Después de que se puede utilizar, por ejemplo

$contextTool.getKeys() 

Si esto no es lo que necesita, hágamelo saber ...

+0

Bueno, tiene usted razón. ¡Se creó la herramienta contextTool! :-) Pero no puedo acceder al contexto de vista dentro de la plantilla para inicializarlo correctamente :-( –

Cuestiones relacionadas