2012-03-22 28 views
9

Tôi đang viết các mẫu vận tốc cho chủ đề cuộc sống của mình và tôi tự hỏi, liệu có thể tạo một đối tượng mới bên trong mẫu vận tốc không.Tạo đối tượng trong mẫu vận tốc

Lý do là trong vòng đời không có contextTool được đăng ký trong ngữ cảnh và tôi thực sự muốn có thể kiểm tra các biến có trong mẫu tại một thời điểm nhất định. Có một macro tuyệt vời cho điều này, nhưng tiếc là nó sử dụng contexttool.

Tôi muốn làm điều gì đó như:

#set($contextTool = new ContextTool()) 

giải pháp sẽ được mã java được cung cấp với chủ đề liferay mà có thể thêm các công cụ trong các mẫu ngữ cảnh. Nhưng tôi không biết làm thế nào điều này sẽ làm việc một trong hai ... ;-)

Trả lời

8

thử với

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

EDIT

NẾU tôi hiểu bạn hơn này sẽ cho bạn những gì bạn muốn

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

Sau đó bạn có thể sử dụng, ví dụ

$contextTool.getKeys() 

Nếu đây không phải là những gì bạn cần, hãy cho tôi biết ...

+0

Vâng, bạn đã đúng. ContextTool được tạo! :-) Nhưng tôi không thể truy cập ngữ cảnh xem bên trong mẫu để khởi tạo đúng :-( –

Các vấn đề liên quan