Liferay 4.2 Velocity 模板 render探索 (兼Java remote debug方法)

Liferay 4.2 parallel rendering 探索 http://pikachu.javaeye.com/blog/39937中我们分析了portal render时的基本过程,但是其中的一个环节
Velocity.evaluate(vc, sw, RuntimePortletUtil.class.getName(), content)

让人很疑惑

这次我们要打开这里的谜团,看看Velocity中的content到底是什么。

这次我决定用动态的代码trace来帮助我们的trace

首先要下载到 liferay的源代码,并加载到eclipse中。
然后修改 liferay 的 bin/catalina.bat文件

set JAVA_OPTS=-Xms128m -Xmx512m -Dfile.encoding=UTF8 -Duser.timezone=GMT -Djava.security.auth.login.config=%CATALINA_HOME%/conf/jaas.config

->
set JAVA_OPTS=-Xms128m -Xmx512m -Dfile.encoding=UTF8 -Duser.timezone=GMT -Djava.security.auth.login.config=%CATALINA_HOME%/conf/jaas.config -Xdebug -Xrunjdwp:transport=dt_socket,address=4321,server=y,suspend=n

新增的参数是告诉jdk,请在4321端口上监听我的调试命令。
其他的java程序也可以用类似的方法进行调试
startup启动 liferay

如果没有异常,我们在Eclipse|Run| Debug|Remote Java Application下新增一个调试配置。将port设置为 4321

debug
没有反应??
切换到 Debug Perspect
Bingo!!


既然调试器已经连接到 liferay上了,我们就可以设置断点

在portal-ejb/src下,找到com. liferay.portlet.layoutconfiguration.util.RuntimePortletUtil
在Velocity.evaluate设置断点

然后用浏览器打开 liferay页面,稍等片刻

马上watch content这个变量

很神奇,竟然是一套模板的内容
仔细查看其中的内容有
$processor.processColumn("column-1")

终于和上次我们的跟踪到的TemplateProcessor.processColumn联系起来了。

那么这套content是从哪里来的呢?
把trace 倒退几层就找到了

打开html/portal/layout/view/portlet.jsp
找到了
	String content = LayoutTemplateLocalUtil.getContent(layoutTypePortlet.getLayoutTemplateId(), false, theme.getThemeId());

RuntimePortletUtil.processTemplate(application, pageContext, request, response, content);


原来content就是Layout Template的内容
另外搜索有$processor.processColumn("column-1")的文件也会发现,这些文件都在layouttpl目录下


最后我们终于把整个环串了起来
LayoutAction->(forward)portal.layout->
(tiles定义)->
html/common/themes/portal.jsp->
(include)portal_normal.jsp->
(include)/portal/layout.jsp->
(include)/portal/layout/view/portlet.jsp(加载template文件)->
RuntimePortletUtil.processTemplate->
Velocity.evaluate(使用template内容作为Velocity模板render)->
TemplateProcessor.processColumn->
PortletColumnLogic.processContent->
带出 /html/portal/load_render_portlet.jsp; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值