`
billy_zh
  • 浏览: 61924 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

liferay portlet处理流程之一

阅读更多

// 初始化
portal.servlet.MainServlet.init()
 // process startup events
 StartupAction.run()

 // 初始化portlets.
 String[] xmls = new String[] {
  Http.URLtoString(ctx.getResource("/WEB-INF/portlet.xml")),
  Http.URLtoString(ctx.getResource("/WEB-INF/portlet-ext.xml")),
  Http.URLtoString(ctx.getResource("/WEB-INF/liferay-portlet.xml")),
  Http.URLtoString(ctx.getResource("/WEB-INF/liferay-portlet-ext.xml")),
  Http.URLtoString(ctx.getResource("/WEB-INF/web.xml"))
 };
 PortletLocalServiceUtil.initEAR(xmls)

 // 初始化display.
 String xml = Http.URLtoString(ctx.getResource(
   "/WEB-INF/liferay-display.xml"));
 PortletCategory newPortletCategory =
  PortletLocalServiceUtil.getEARDisplay(xml);
 portletCategory.merge(newPortletCategory);

 // 初始化layout模板.
 String[] xmls = new String[] {
  Http.URLtoString(ctx.getResource(
   "/WEB-INF/liferay-layout-templates.xml")),
  Http.URLtoString(ctx.getResource(
   "/WEB-INF/liferay-layout-templates-ext.xml"))
 };
 LayoutTemplateLocalUtil.init(ctx, xmls)

 // 初始化Theme.
 String[] xmls = new String[] {
  Http.URLtoString(ctx.getResource(
   "/WEB-INF/liferay-look-and-feel.xml")),
  Http.URLtoString(ctx.getResource(
   "/WEB-INF/liferay-look-and-feel-ext.xml"))
 };
 ThemeLocalUtil.init(ctx, xmls)

 // 检查company
 CompanyLocalServiceUtil.checkCompany(_companyId);

 // 其它内容...

// 响应服务
portal.servlet.MainServlet.service()
 
 // get portalContext
 ServletContext ctx = getServletContext();
 ServletContext portalCtx = ctx.getContext(
  PrefsPropsUtil.getString(_companyId, PropsUtil.PORTAL_CTX));
 
 // Struts module config
 ModuleConfig moduleConfig = getModuleConfig(req);

 // Portlet Request Processor - 在struts.config中定义.
 portletReqProcessor = PortletRequestProcessor.getInstance(this, moduleConfig);

 // 登录处理.

 // 处理service前置事件.
 EventsProcessor.process(PropsUtil.getArray(PropsUtil.SERVLET_SERVICE_EVENT_PRE), req, res);

 // 调用Struts的service方法.
 callParentService(req, res);

 // 处理Sruts后置事件.
 EventsProcessor.process(PropsUtil.getArray(PropsUtil.SERVLET_SERVICE_EVENTS_POST), req, res);
 
// struts的ActionServlet.
ActionServlet.process(HttpServletRequest req, HttpServletResponse res)
 processor.process(req, res);

// portal的RequestProcessor.
portal.struts.PortalRequestProcessor.process(HttpServletRequest req, HttpServletResponse res)
  
 // struts的RequestProcessor
 RequestProcessor.process(HttpServletRequest req, HttpServletResponse res)

  string path = processPath(req, res)  // PortalRequestProcessor重载

  ActionMapping mapping = processMapping(req, res, path);

  processRoles(req, res, mapping) // PortalRequestProcessor重载

  ActionForm from = processActionForm(req, res, mapping);

  processForward(req, res, mapping);

  processInclude(req, res, mapping);

  Action action = processActionCreate(req, res, mapping);

  ActionForward forward = processActionPerform(req, res, action, form, mapping);

  processForwardConfig(req, res, forward);  // TilesRequestProcessor重载
  
 // tiles的RequestProcessor
 TilesRequestProcessor.processForwardConfig(req, res, forward)

  processTilesDefinition(forward.getPath(), forward.getContextRelative(), req, res);

   Controller.execute();  // 输出/portal/layout.jsp


/html/portal/layout.jsp  - portal布局页面.
 
<liferay-util:include page="&lt;%= Constants.TEXT_HTML_DIR + PortalUtil.getLayoutViewPage(layout) %&gt;"></liferay-util:include> 此处include在/portal-ejb/classes/portal.properties里layout.view.page定义的页面/portal/layout/view/portlet.jsp

/html/portal/layout/view/portlet.jsp  - portlet布局视图页面.

// 读取模板内容,模板由liferay-layout-templates.xml文件定义.
String content = LayoutTemplateLocalUtil.getContent(
 layoutTypePortlet.getLayoutTemplateId(), false, theme.getThemeId());
 下面是一个一列的模板:
 <div id="layout-content-outer-decoration">
 <div id="layout-content-inner-decoration">
  <div id="layout-content-container">
   $processor.processColumn("column-1")
  </div>
 </div>
 </div>

// 处理模板
portlet.layoutconfiguration.util.RuntimePortletUtil.processTemplate(
  application, pageContext, request, response, content); 

 // 注入模板处理程序
 TemplateProcessor processor = new TemplateProcessor(ctx, req, res, portletId);
 VelocityContext context = new VelocityContext();
 context.put("processor", processor); 
 // 处理模板
 Velocity.evaluate(context, pageContext.getOut(),
  RuntimePortletUtil.class.getName(), content); 

分享到:
评论

相关推荐

    liferay portlet 开发实例

    在IT领域,特别是企业级应用开发中,Liferay作为一个强大的企业门户平台,提供了丰富的功能和服务,其中Liferay Portlet的开发是构建定制化企业应用的关键技术之一。本文将基于提供的文件信息,深入解析Liferay ...

    Liferay Portlet 开发文档

    文档强调了Liferay作为一款开源企业级门户网站解决方案的特殊之处,提供了关于Liferay IDE开发环境的介绍和应用。 文档详细介绍了如何搭建Liferay开发环境,包括安装JDK、MySQL数据库和Ant构建工具,以及如何将...

    liferay portlet 站内消息组件

    开发这样一个组件需要对Liferay Portlet API、JSP以及Liferay的权限和部署流程有深入的理解。通过message-portlet这个压缩包,我们可以期待找到所有实现这些功能的源代码、配置文件和其他资源。

    Liferay-Portlet-SDK5.2.3.rar_liferay_liferay sdk_portlet

    Portlet是一种在门户平台上运行的小型应用程序,它可以显示动态内容并交互与用户。Liferay Portlet SDK 5.2.3允许开发者利用Java Portlet API来创建portlet,这些portlet可以与其他portlet、页面和门户组件协同工作...

    liferay portlet开发

    在Liferay中,Portlet是一种用于显示内容和服务的应用程序组件,它是门户应用程序的核心部分。本文档旨在详细介绍如何通过插件(plugin)方式开发Liferay Portlet。 #### 二、开发模式的选择 Liferay提供了两种主要...

    用struts1.X实现liferay portlet插件(HelloWorld)

    Liferay Portal则是一款开源的企业门户平台,它允许开发者创建、集成和管理各种Web应用程序,包括portlet。Portlet是Liferay中的一个关键组件,可以看作是门户中的可重用的小应用程序。 在"用struts1.X实现liferay ...

    liferay_portlet对象详解

    Portlet 技术的理解和应用是开发 Liferay 应用程序的关键。本文将深入解析 Portlet 的关键概念,包括 Portlet 请求与 URL、Portlet 模式和窗口状态。 1. Portlet 请求与 URL 在 Liferay 的 Portal 页面中,多个 ...

    liferay-portlet-development

    本书将通过构建一个图书馆管理系统的portlet来实践Liferay开发流程。从创建项目、编写代码、部署测试,到最后的代码优化,详细讲解每一个步骤,让读者掌握Liferay Portlet开发的核心技巧。 ### 结语 《Liferay ...

    Liferay_Control-Panel_Portlet DTD-5.2_MVC-Portlet

    在IT行业中,Liferay是一个广泛使用的开源企业级门户平台,它允许用户构建和管理复杂的Web应用程序。本主题主要关注Liferay中的"Control-Panel Portlet"、"DTD 5.2"以及"MVC Portlet"这三大核心概念。 首先,我们来...

    Liferay porta 清理不需要的Portlet 代码

    一、为什么要清理Liferay Portlet代码 1. 资源优化:废弃的Portlet代码占用了服务器的磁盘空间和内存,清理它们可以释放资源,提高系统性能。 2. 维护简便:减少无用代码可以降低维护复杂性,使得开发者更容易理解和...

    CAS, Liferay和Alfresco portlet三者的整合

    4. **开发或配置portlet**:在Liferay中创建或安装一个portlet,这个portlet可以与Alfresco通信,展示和处理Alfresco的内容。 5. **工作流集成**:如果需要,可以通过Alfresco的API或者使用预定义的工作流程模板,...

    liferay_使用struts2开发portlet

    通过上述步骤,我们可以了解到在Liferay环境中使用Struts2开发Portlet的具体流程。整个过程涉及了开发环境的搭建、项目创建、Portlet类的编写以及Struts配置文件的设置等多个环节。这些步骤不仅为初学者提供了清晰的...

    liferay开发demo

    Liferay 是一个开源的企业级门户平台,用于构建和管理Web应用程序。它提供了丰富的功能,如内容管理、社交网络、工作流程等,同时也支持自定义开发,以满足特定业务需求。在Liferay中,Portlet是核心组件,它是一个...

    Liferay form机制及例子

    在用户界面中,如果portlet包含一个表单,用户填写并提交表单时,Liferay的表单处理流程会按照以下步骤进行: 1. **提交表单**:当用户点击提交按钮,浏览器会向服务器发送一个POST请求,该请求的目标是表单中的`...

    liferay的开发流程

    在Liferay框架中,Struts Portlet是一种常用的开发方式,它结合了Struts MVC架构和Liferay Portal的功能,使得开发者可以构建动态、交互式的Web应用。以下是对Liferay Struts Portlet开发流程的详细说明: 1. **...

    render-public-portlet-5.2.6.1.zip_5 to 1

    这可能是一个教学或示例性质的portlet,通过它,开发者可以学习和理解Liferay Portlet开发的基本流程和关键概念。 Liferay是一个开源的企业级内容管理和数字体验平台,Portlets是Liferay生态系统中的核心组件,它们...

    liferay的开发文档

    总结来说,这四个Liferay开发文档为开发者提供了一个全面的学习路径,从基础的portlet开发到高级的主题和插件设计,再到Liferay服务的集成和定制,覆盖了Liferay开发的各个方面。对于希望深入理解和精通Liferay开发...

    liferay的那些东西

    Portlet是Liferay中的核心组件,它类似于一个可重用的Web应用程序模块,可以集成到门户页面上。 在“liferay的那些东西”这个压缩包中,我们可以看到一些关于Liferay Portlet开发的关键资料: 1. **ant笔记.doc** ...

    liferay portal(jsp)开发指南

    《Liferay Portal JSP开发指南》 ...理解这些基本概念和流程,对于高效地开发和维护Liferay Portlet至关重要。在实际开发中,开发者还需要掌握Liferay API、服务构造、权限管理等高级特性,以实现更复杂的功能。

    liferay6.2开发指南.pdf

    本开发指南将帮助开发者深入理解 Liferay 的核心概念和开发流程,以便充分利用其潜力来构建高效、定制化的Web应用程序。 ### 第 1 章 认识 Liferay 开发平台的价值 #### 1-1 节 关于本教程 本教程旨在引导开发者...

Global site tag (gtag.js) - Google Analytics