在 Liferay 4.2 parallel rendering 探索 http://pikachu.javaeye.com/blog/39937中我们分析了portal render时的基本过程,但是其中的一个环节
让人很疑惑
这次我们要打开这里的谜团,看看Velocity中的content到底是什么。
这次我决定用动态的代码trace来帮助我们的trace
首先要下载到liferay的源代码,并加载到eclipse中。
然后修改liferay 的 bin/catalina.bat文件
将
->
新增的参数是告诉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这个变量
很神奇,竟然是一套模板的内容
仔细查看其中的内容有
终于和上次我们的跟踪到的TemplateProcessor.processColumn联系起来了。
那么这套content是从哪里来的呢?
把trace 倒退几层就找到了
打开html\portal\layout\view\portlet.jsp
找到了
原来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;
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;
- 浏览: 72803 次

- 详细资料
搜索本博客
我的相册
generate friendlyurl
共 25 张
共 25 张
最新评论
-
Liferay 4.3 与CAS集成配 ...
配置成功,谢谢楼主,^_^
-- by bobfallen -
Liferay 4.3 新功能介绍-- ...
这个我试了,很好用,可是是不是只能通过root.xml的配置共用一个数据库阿?怎 ...
-- by quickSand -
Liferay 4.3 与CAS集成配 ...
谁配成功了
-- by sun128837 -
Liferay 4.3 中 friendly ...
不错,受益匪浅。不过当用户的screenName是汉字时,FriendlyURL ...
-- by dins2003 -
Liferay中的第三方组件: ...
suyulin6688 写道不错。 不过有个问题, 假设我在“login.js ...
-- by hanfeng






评论排行榜