在 Liferay 4.2 parallel rendering 探索
http://pikachu.iteye.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;
分享到:
相关推荐
**标题:“Liferay 4.2 和Openfire的组合使用”** 在IT行业中,集成不同的软件和服务以构建高效的企业级解决方案是一项常见的任务。本话题主要关注如何将Liferay Portal 4.2与Openfire即时通讯服务器相结合,以提供...
在本文中,我们将深入探讨如何配置Liferay 4.2.0版本,这是一个知名的开源企业级门户平台。根据描述,虽然官方文档可能是针对4.3.5版本的,但据称4.2.0版本与之仅有微小差异。我们将重点关注如何在Eclipse集成环境中...
- 在Eclipse的"Run" -> "Debug Configurations"中,创建一个新的"Remote Java Application"配置。 - 在"Project"选项卡中,选择你要调试的Liferay项目。 - 在"Connectivity"选项卡中,设置主机和端口。默认情况下...
### Liferay Portal 模板开发知识点详解 #### 一、概述 Liferay Portal 是一个开源的企业级内容管理系统,主要用于构建企业门户和社区网站。Liferay Portal 提供了强大的功能,如用户管理、权限控制、工作流等,...
2. **Liferay中Velocity theme页面显示的一个重要类(TemplateProcessor.java)**:该文档可能深入讨论了Liferay使用Velocity模板语言处理页面的过程。TemplateProcessor是 Velocity模板引擎的关键组件,它解析模板...
标题 "liferay tomcat eclipse debug" 暗示了我们正在讨论如何在Eclipse环境中调试Liferay Portal,这是一个基于Java的开源企业级内容管理和协作平台,通常与Apache Tomcat这样的Servlet容器结合使用。以下是关于这...
在Liferay门户中使用Velocity模板,开发者可以在三个不同的地方利用Velocity模板引擎:主题(Themes)、布局模板(Layout Templates)和CMS模板(CMSTemplates)。虽然这些地方都使用Velocity模板,但它们的行为略有...
`themes`目录则可能包含了实际的主题文件夹,每个主题都有自己的结构,包含CSS、图片、JavaScript以及模板文件( Velocity 或 FreeMarker)。 2. **build.properties**:这是Maven项目的配置文件,用于定义构建过程...
它讲解了CSS、HTML和JS在Liferay主题中的应用,以及如何使用FreeMarker和Velocity模板语言来创建响应式和动态主题。 5. 《Liferay Social Enterprise》 Liferay不仅是一个门户平台,也是一个强大的社交协作工具。...
在Java开发领域,Liferay是一个广泛使用的开源企业级门户框架。它提供了一套完整的工具集,用于构建、管理和部署企业级应用程序。其中,`com.liferay.util.ParamUtil.java`是Liferay框架中的一个核心工具类,主要...
本超学习文档将深入探讨Liferay的核心特性、开发环境、Java技术的应用以及Hibernate在Liferay中的整合。 一、Liferay 框架 Liferay 框架基于Java EE(Enterprise Edition)标准,它提供了丰富的API和工具,允许...
环境搭建 一、资源准备 以上资源内容可以在Liferay的官方网站下载, 1 liferay-plugins-sdk-6.1.1...经过上面的三步,在Liferay IDE(Eclipse 4.2)的下方的server面板处,可以看到Liferay 6.1 CE Server,现在点击运行
- **Liferay SDK:**Liferay提供了SDK,包含了一系列工具和模板,帮助开发者快速构建和部署Portlets。 - **编写简单JSPPortlet:**通过学习如何编写JSPPortlet,开发者能够理解Liferay Portlet的基本结构和工作原理...
JFC(Java Foundation Classes)和Swing是Java GUI编程的重要工具,Liferay允许开发者使用Swing组件创建自定义portlet,以提供丰富的用户交互体验。通过这份文档,我们可以深入学习Swing组件的使用,从而更好地设计...
本主题关注的是如何在Liferay7中集成Activiti BPM,并通过上传文件来部署流程模板。 首先,我们要理解Liferay7和Activiti的集成基础。Liferay7提供了丰富的API和插件机制,使得与第三方服务如Activiti的集成变得...
在Java代码中,我们通常会看到一个继承自Liferay的Portlet类的自定义类,这个类包含了处理portlet请求的方法,如doView(),这是portlet显示内容的主要方法。在这里,开发人员可能会写入打印"Hello, World!"的逻辑。...