`
hanjiangit
  • 浏览: 185384 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

liferay配置文件说明

阅读更多

 原文链接:http://zuozheng456.blog.163.com/blog/static/2369005620090825129114/

portlet.xml

portlet定义描述文件,它描述portlet的类型,支持Mode, preferenes和role等,遵循JSR168标准实现,以便于移植(需要针对性的做一些小改过)。

下面是一个简单的定义:

 <portlet>
  <portlet-name>2</portlet-name>
  <display-name>My Account</display-name>
  <!-- portlet的实现类 -->
  <portlet-class>com.liferay.portlet.StrutsPortlet</portlet-class>
  <init-param>
   <name>view-action</name>
   <value>/my_account/view</value>
  </init-param>
  <expiration-cache>0</expiration-cache>
  <supports>
   <mime-type>text/html</mime-type>
  </supports>
  <resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
 </portlet>

在JSR168标准中,定义了view/edit/help三种模式,
liferay对其进行了扩展,增加了config/about/preview/print等模式。

liferay-portlet.xml

liferay的portlet定义描述文件,是liferay对portlet.xml的扩展描述,允许我们对portlet的呈现、功能和行为进行更深入的定制。
它与com.liferay.portal.model.Portlet类对应,

下面是一个较为详细的liferay-portlet定义:
 <portlet>
  <portlet-name>19</portlet-name>
                <!-- struts路径 -->
  <struts-path>message_boards</struts-path>
                <!-- 配置路径 -->
  <configuration-path>/message_boards/edit_configuration</configuration-path>
                <!-- lucene索引类 -->
  <indexer-class>com.liferay.portlet.messageboards.util.Indexer</indexer-class>
                <!-- url处理类 -->
  <portlet-url-class>com.liferay.portlet.messageboards.MBFriendlyPortletURL</portlet-url-class>
                <!-- 友好url插件类 -->
  <friendly-url-plugin-class>com.liferay.portlet.messageboards.MBFriendlyURLPortletPlugin</friendly-url-plugin-class>               
  <preferences-unique-per-layout>false</preferences-unique-per-layout>
  <use-default-template>false</use-default-template>
  <restore-current-view>false</restore-current-view>
  <private-request-attributes>false</private-request-attributes>
 </portlet>

portlet类中常用的属性:

// strtus 路径,对portlet的请求应该限制在这个路径下 
private String _strutsPath; 

// 配置路径,即action定义
private String _configurationPath;

// portlet实现类
private String _portletClass;

// lucene索引类
private String _indexerClass;

// scheduler类
private String _schedulerClass;

// portletURL处理类
private String _portletURLClass;

// friendURL插件
private String _friendlyURLPluginClass;

// 默认的preferences
private String _defaultPreferences;

// preferences的验证类
private String _prefsValidator;

// 是否实例化,为true时可添加多个portlet到layout上
private boolean _instanceable;

// 是否为系统portlet,
private boolean _system;

// 初始化参数
private Map _initParams;

// portlet支持的模式
private Map _portletModes;

// portlet支持的语言
private Set _supportedLocales;

// PortletInfo
private PortletInfo _portletInfo;

// 是否静态portlet, 静态portlet不能移动.
private boolean _staticPortlet;

// 是否为开始的静态portlet.
private boolean _staticPortletStart;

portlet解析

 com.liferay.portal.service.impl.PortletLocalServiceImpl

 public void initEAR(String[] xmls) {
  String scpId = PortletServiceImpl.class.getName() + "." + _SHARED_KEY;

  Map portletsPool = (Map)SimpleCachePool.get(scpId);

  if (portletsPool == null) {
   portletsPool = CollectionFactory.getSyncHashMap();
   SimpleCachePool.put(scpId, portletsPool);
  }

  try {
   List servletURLPatterns = _readWebXML(xmls[4]);

   Set portletIds =
    _readPortletXML(xmls[0], portletsPool, servletURLPatterns);
   portletIds.addAll(
    _readPortletXML(xmls[1], portletsPool, servletURLPatterns));

   Set liferayPortletIds =
    _readLiferayPortletXML(xmls[2], portletsPool);
   liferayPortletIds.addAll(
    _readLiferayPortletXML(xmls[3], portletsPool));

   // Check for missing entries in liferay-portlet.xml
   // 检查在liferay-portlet中丢失的portlet实体...

   // Remove portlets that should not be included
   // 移去不应该包括的portlet实体...
  }
  catch (Exception e) {
   _log.error(StackTraceUtil.getStackTrace(e));
  }
 }

 // 解析portlet.xml
 private Set _readPortletXML(
   String servletContextName, String xml, Map portletsPool,
   List servletURLPatterns)
  throws DocumentException, IOException {

  Set portletIds = new HashSet();

  if (xml == null) {
   return portletIds;
  }

  SAXReader reader = SAXReaderFactory.getInstance();

  Document doc = reader.read(new StringReader(xml));

  Element root = doc.getRootElement();

  Set userAttributes = new HashSet();

  Iterator itr1 = root.elements("user-attribute").iterator();
  // 用户属性处理...

  itr1 = root.elements("portlet").iterator();

  while (itr1.hasNext()) {
   Element portlet = (Element)itr1.next();

   String portletId = portlet.elementText("portlet-name");

   if (servletContextName != null) {
    portletId =
     portletId + Portlet.WAR_SEPARATOR + servletContextName;
   }

   portletId = PortalUtil.getJsSafePortletName(portletId);

   if (_log.isDebugEnabled()) {
    _log.debug("Reading portlet " + portletId);
   }

   portletIds.add(portletId);

   Portlet portletModel = (Portlet)portletsPool.get(portletId);

   if (portletModel == null) {
    portletModel = new Portlet(
     new PortletPK(portletId, _SHARED_KEY));

    portletsPool.put(portletId, portletModel);
   }

   if (servletContextName != null) {
    portletModel.setWARFile(true);
   }

   if (servletURLPatterns != null) {
    portletModel.setServletURLPatterns(servletURLPatterns);
   }

   portletModel.setPortletClass(portlet.elementText("portlet-class"));

   Iterator itr2 = portlet.elements("init-param").iterator();
   // 初始化参数处理...

   Element expirationCache = portlet.element("expiration-cache");
   // cache过期处理...

   itr2 = portlet.elements("supports").iterator();
   // 支持模式处理...

   Set supportedLocales = portletModel.getSupportedLocales();
     // 支持语言处理...

     // 资源
   portletModel.setResourceBundle(
    portlet.elementText("resource-bundle"));

   Element portletInfo = portlet.element("portlet-info");
     // portlet-info处理...

   Element portletPreferences = portlet.element("portlet-preferences");
   // preferences处理...

  
   Set unlikedRoles = portletModel.getUnlinkedRoles();
   itr2 = portlet.elements("security-role-ref").iterator();
   // role处理...

   portletModel.getUserAttributes().addAll(userAttributes);
  }

  return portletIds;
 }

 // 解析liferay-portlet.xml
 private Set _readLiferayPortletXML(
   String servletContextName, String xml, Map portletsPool)
  throws DocumentException, IOException {

  Set liferayPortletIds = new HashSet();

  if (xml == null) {
   return liferayPortletIds;
  }

  SAXReader reader = SAXReaderFactory.getInstance();

  Document doc = reader.read(new StringReader(xml));

  Element root = doc.getRootElement();

  Map roleMappers = new HashMap();

  Iterator itr1 = root.elements("role-mapper").iterator();
  // role-mapper处理...

  Map customUserAttributes = new HashMap();

  itr1 = root.elements("custom-user-attribute").iterator();
  // 定制用户属性处理...

  Map friendlyURLPlugins = _getFriendlyURLPlugins();

  itr1 = root.elements("portlet").iterator();

  while (itr1.hasNext()) {
   Element portlet = (Element)itr1.next();

   String portletId = portlet.elementText("portlet-name");

   if (servletContextName != null) {
    portletId =
     portletId + Portlet.WAR_SEPARATOR + servletContextName;
   }

   portletId = PortalUtil.getJsSafePortletName(portletId);

   if (_log.isDebugEnabled()) {
    _log.debug("Reading portlet extension " + portletId);
   }

   liferayPortletIds.add(portletId);

   Portlet portletModel = (Portlet)portletsPool.get(portletId);

   if (portletModel != null) {
    // 设置portlet属性...

    // 处理FriendURL插件
    portletModel.setFriendlyURLPluginClass(GetterUtil.getString(
     portlet.elementText("friendly-url-plugin-class"),
     portletModel.getFriendlyURLPluginClass()));

    if (Validator.isNull(
      portletModel.getFriendlyURLPluginClass())) {

     friendlyURLPlugins.remove(portletId);
    }
    else {
     friendlyURLPlugins.put(
      portletId, portletModel.getFriendlyURLPluginClass());
    }

    // 绑定role.
    portletModel.getRoleMappers().putAll(roleMappers);
    portletModel.linkRoles();

    portletModel.getCustomUserAttributes().putAll(
     customUserAttributes);
   }
  }

  return liferayPortletIds;
 }

从上面的代码可看出,liferay将portlet的描述定义存储在一个Map中.


liferay-display.xml
portlet的类别定义文件,下面是一个简单的例子:

 <category >
  <portlet id="9" />
  <portlet id="40" />
  <portlet id="79" />
  <portlet id="80" />
 </category>

要注意的是,在portlet.xml/liferay-portlet.xml/liferay-display.xml三个文件中的portlet-name, portlet-id必须是一致的。


liferay-layout-templates.xml
layout模板定义文件.

liferay-look-and-feel.xml
主题定义文件.

portlet的web.xml

如果以war的方式发布portlet,那么它的web.xml也要进行一些特定的说明,

下面是liferay中sample-jsp-portlet示例的web.xml:
<web-app>
 <display-name>sample-jsp-portlet</display-name>
 <context-param>
  <param-name>company_id</param-name>
  <param-value>liferay.com</param-value>
 </context-param>
 <listener>
  <listener-class>com.liferay.portal.kernel.servlet.PortletContextListener</listener-class>
 </listener>
 <servlet>
  <servlet-name>sample_jsp_portlet</servlet-name>
  <servlet-class>com.liferay.portal.kernel.servlet.PortletServlet</servlet-class>
  <init-param>
   <param-name>portlet-class</param-name>
   <param-value>com.sample.jsp.portlet.JSPPortlet</param-value>
  </init-param>
  <load-on-startup>0</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>sample_jsp_portlet</servlet-name>
  <url-pattern>/sample_jsp_portlet/*</url-pattern>
 </servlet-mapping>
 <taglib>
  <taglib-uri>http://java.sun.com/portlet</taglib-uri>
  <taglib-location>/WEB-INF/tld/liferay-portlet.tld</taglib-location>
 </taglib>
</web-app>
上面的listener是必须的,它用于通知liferay进行热部署,
portlet-class指定Portlet的实现类,它必须遵循JSR168标准,直接或间接的从javax.portlet.GenericPortlet继承。

分享到:
评论

相关推荐

    liferay 权限文件说明

    ### Liferay权限文件说明 #### 一、概述 在Liferay平台中,权限管理是非常重要的一个环节,它确保了系统的安全性和数据的访问控制。本文档主要介绍的是`permissions.xml`文件及其相关配置,这对于理解如何在...

    Liferay5.1.2配置Oracle10G数据库操作说明书

    【Liferay 5.1.2 配置 Oracle 10G 数据库操作详解】 Liferay 是一款开源的企业级门户平台,它默认使用 HSQLDB 作为内置数据库...在配置过程中,如果遇到错误,务必仔细检查配置文件和日志,确保所有步骤都已正确执行。

    配置liferay开发环境说明

    ### Liferay开发环境配置知识点详解 #### 一、概述 Liferay是一款开源的企业级门户平台,支持企业内外部网站、社区、社交网络等多种应用。本文档主要介绍如何配置Liferay的开发环境,以便进行定制开发。 #### 二、...

    liferay详细讲解 liferay项目完全讲解

    首先,我们看到一个名为“JBPM数据库表说明.doc”的文件,这暗示了Liferay与业务流程管理(Business Process Management,简称BPM)系统的集成。JBPM是一个开源的工作流和业务规则管理系统,Liferay可以通过它来实现...

    liferay 6.0 开发指南

    - **覆盖portal.properties**:解释了如何修改Liferay的核心配置文件portal.properties。 - **覆盖Portal Service**:介绍了如何扩展或覆盖Liferay的现有服务。 - **覆盖Language.properties文件**:说明了如何更改...

    liferay&cas开发说明

    【标题】"liferay&cas开发说明"涉及的是在企业级Web应用开发中,如何将Liferay Portal与Central Authentication Service(CAS)进行集成的主题。Liferay是一款开源的企业级门户平台,而CAS则是一种开放源码的身份...

    liferay帮助文档

    - **配置文件**: 如`liferay-portlet.xml`和`struts-config.xml`,这些文件用于定制Liferay的功能,如配置Portlet的行为。 - **Social Office CE-3.0.lpkg**: 社交办公软件的安装包,提供协作和文件共享功能。 - **....

    liferay portal开发大全

    学习如何配置Liferay的部署文件(如portal-ext.properties)以定制门户的行为和功能至关重要。 4. **Liferay 帮助与文档** 提供的中文文档涵盖了Liferay Portal的安装、升级、数据库配置、安全性和性能优化等多个...

    liferay.properties中的几处说明

    在Liferay Portal中,`liferay.properties`是一个关键的配置文件,它定义了系统的各种行为和设置。在本文中,我们将深入探讨这个文件中与页面可见性、我的位置portlet(My Places Portlet)以及用户协议展示相关的...

    Liferay管理员手册

    - **Liferay家园**: 设置Liferay的主目录,用于存放配置文件和数据。 - **数据库安装**: - **默认方法:自动**: 使用内置的HSQLDB数据库进行快速安装。 - **手工方法**: 指导如何连接到外部数据库服务器,如MySQL...

    Liferay开发环境配置.pdf

    以下是对配置过程的详细说明: 1. **Eclipse集成开发环境**:首先,需要安装Eclipse IDE,推荐版本为Helios或alileo。Eclipse是Java开发的常用工具,支持多种Web开发框架,包括Liferay。 2. **安装Liferay IDE插件...

    liferay环境搭建.doc

    如果你想让JAR包在部署后直接出现在Liferay的Tomcat目录下,可以修改工作区的`gradle.properties`文件,添加属性`liferay.workspace.home.dir`指向Liferay安装目录。 2. **Service Builder使用** - 创建一个新的...

    Liferay6.2的简单一个portal例子并写了简单代码说明。可以运行,自己写的。

    此外,"说明"文件应包含了关于如何配置、部署和测试这个portlet的详细步骤,以及可能遇到的问题和解决方法。这将帮助开发者理解portlet的工作原理,并在自己的环境中复现这个例子。 总之,Liferay 6.2的这个简单...

    Liferay6 官方培训学习笔记

    接下来,我们将以MySQL数据库为例,详细说明如何配置Liferay的数据库连接。 **步骤2.1:新建数据库** 在配置Liferay与MySQL数据库连接前,请确认本地已安装MySQL数据库及相应的管理工具,如MySQL Front。接着,...

    liferay5.2.3 tomcat6 eclipse ide 开发文档

    #### 三、Liferay 配置文件介绍 **3.1 Liferay 几个常用目录介绍** - **/tomcat/webapps/ROOT/**:Liferay的核心目录,包含门户的主要资源和配置文件。 - **/tomcat/webapps/ROOT/WEB-INF/**:存放web应用的配置...

    liferay_permissions.rar_liferay

    另一方面,`www.pudn.com.txt`可能是一个链接或说明文件,提供了更多关于此主题的来源或者补充信息,比如在Pudn网站上可能有相关的讨论或教程。 理解并掌握Liferay的权限系统对于开发和维护安全、高效的Liferay门户...

    Liferay-Portlet-SDK5.2.3.rar_liferay_liferay sdk_portlet

    - **文档**:如“Liferay-Portlet-SDK 5.2.3操作说明.ppt”文件,它详细介绍了SDK的使用方法,包括portlet的开发流程、配置、部署以及调试技巧。这份文档通常会涵盖portlet生命周期、portlet上下文、渲染和事件处理...

    java-oracle.rar_liferay_oracle

    Liferay支持多种数据库,包括Oracle,但为了使用Oracle,我们必须在Liferay的`portal-ext.properties`配置文件中指定相应的数据库URL、用户名、密码和驱动类名。例如: ``` jdbc.default.driverClassName=oracle....

Global site tag (gtag.js) - Google Analytics