`
qinya06
  • 浏览: 583075 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Liferay Portal 应用之开发(1)

 
阅读更多
1.下载安装Eclipse

Eclipse是一个优秀的软件开发平台,涵盖了软件开发的完整生命周期,包括建模,开发,部署,管理和测试。Eclipse的插入式可扩展架构,使得它能够同时支持Java,C,C++,PHP等语言工具在企业应用、嵌入式应用和实时应用多方面的项目开发。其中,Eclipse Web Tools Platform(WTP)软件包在Eclipse平台中提供了适合于开发Web服务和Java EE应用的丰富工具,再配合适当的插件,完全能够满足绝大多数Java应用开发的需要。因此,我们选择了Eclipse作为Liferay Portal应用的开发平台。

Eclipse WTP软件包的最新版本是3.0.1,要求运行在Eclipse-SDK-3.4以上版本,且需要其他一些扩展软件包如JDT,EMF,GEF等。

首先从Eclipse的网站http://www.eclipse.org/downloads/packages/ 选择下载Eclipse IDE for Java EE Developers软件包eclipse-jee-ganymede-win32.zip,解压缩到C:\Java\目录中,产生目录eclipse。

再到 http://download.eclipse.org/webtools/downloads/ 选择下载WTP软件包wtp-R-3.0.1-20080818032401.zip,也解压缩到C:\Java\目录下,覆盖已有的eclipse目录(仅添加了plugins和features子目录内容)。

最后,把Eclipse的安装目录名eclipse重命名为eclipse-3.0.1,即Eclipse WTP的主目录是C:\Java\eclipse-3.0.1\。进入该目录执行eclipse.exe启动eclipse平台。该平台界面是英文版的,但支持中文处理。
三、Liferay应用开发

在我们建立的eclipse开发环境中进行应用开发。按照Liferay的建议,二次开发最好是在ext项目中进行。而且在ext项目中,Liferay的核心内容是经过打包后复制过来的,对Liferay的修改或应用开发要按照Liferay的建议,以“扩展”的形式来实现。这样的话,当Liferay升级更新了源码后,重新生成ext项目时也不会覆盖原来在ext中所作的变动。

1、修改中文译文

在Liferay Portal中使用者可以随时切换到不同的语种界面。与其他Java应用一样,Liferay的国际化也是通过使用对应于各种语言的资源文件实现的。国际化的资源文件名格式为Language_{语种名称}.properties。例如,简体中文的资源文件名是Language_zh_CN.properties。Liferay的基础语言是英语,在每个语种的资源文件中定义了英语词句与该语种词句的对应关系。因此,中文译文的修改比较容易。

由于Java资源文件的编码格式是ISO-8859-1,而我们使用的中文Windows操作系统的编码是GBK,因此不能直接显示和编辑资源文件内容,需要为eclipse添加一个资源文件编辑插件Jinto。进入网站http://www.guh-software.de/jinto_en.html, 选择下载适合于eclipse 3.3.X版本的插件包de.guhsoft.jinto-0.11.0.zip。下载后解压缩到eclipse目录C:\Java\eclipse-3.0.1\中。

启动eclipse,依次打开portal项目->portal-imp/src->content,找到简体中文语言资源文件Language_zh_CN.properties,把它复制到ext项目的对应目录下(ext项目->ext-imp/src->content),再重新命名为Language-ext_zh_CN.properties。我们所要修改的将是这个新文件。这是一种扩展修改方式,它保留了原来资源文件里的定义,但可以用新的定义替换旧的,也可以添加新的定义项。

打开该文件进行修改时,可以先把那些无需修改的定义项给删除掉,以减少重复的内容,方便修改。由于Jinto资源编辑器没有批量替换功能,就只能逐条修改了。修改完成要保存文件,并执行ant部署操作之后,才能够在Liferay Portal的运行系统中起作用。
2、增加网页布局模板

我们打算仿照系统已有的70/30比例的两列模板,制作一个40/60比例的两列布局模板。制作步骤如下:

(1)打开portal项目,进入portal-web->docroot目录中,把layouttpl子目录复制到ext项目的对应目录ext-web->docroot中。然后再次进入portal项目的portal-web->docroot->WEB-INF目录,把配置文件liferay-layout-templates.xml也复制到ext项目的对应目录ext-web->docroot->WEB-INF中,并把它重命名为liferay-layout-templates-ext.xml。

(2)修改配置文件liferay-layout-templates-ext.xml,去除多余的定义内容,仅保留有关2_columns_iii的定义内容。再把文件里的_iii改为_iv,修改70/30为40/60。修改好的文件内容如下:

<?xml version="1.0"?>

<!DOCTYPE layout-templates PUBLIC "-//Liferay//DTD Layout Templates 5.1.0//EN"

"http://www.liferay.com/dtd/liferay-layout-templates_5_1_0.dtd">

<layout-templates>

    <custom>

           <layout-template id="2_columns_iv" name="2 Columns(40/60)">

                  <template-path>/layouttpl/custom/2_columns_iv.tpl</template-path>

                  <wap-template-path>/layouttpl/custom/2_columns_iv.wap.tpl</wap-template-path>

                  <thumbnail-path>/layouttpl/custom/2_columns_iv.png</thumbnail-path>

           </layout-template>

    </custom>

</layout-templates>

(3) 进入ext项目的ext-web->docroot->layouttpl目录,删除文件thumbnails.zip和目录standard。进入custom目录,只保留2_columns_iii.pnp,2_columns_iii.tpl和2_columns_iii.wap.tpl三个文件,删除其余文件。再把这三个文件对应地重命名为2_columns_iv.pnp,2_columns_iv.tpl,2_columns_iv.wap.tpl。其中,2_columns_iv.wap.tpl是移动设备浏览版式,不必修改。2_columns_iv.pnp是版式模板的示例图片,可以复制出来用图形处理软件进行适当修改。2_columns_iv.tpl是电脑浏览器格式模板,需要作如下修改:把该文件中的seventy修改为forty;把该文件中的thirty修改为sixty。修改完成之后,2_columns_iv.tpl文件内容如下:

<div class="columns-2" id="content-wrapper">

    <table class="lfr-grid" id="layout-grid">

    <tr>

           <td class="lfr-column forty" id="column-1" valign="top">

                  $processor.processColumn("column-1")

           </td>

           <td class="lfr-column sixty" id="column-2" valign="top">

                  $processor.processColumn("column-2")

           </td>

    </tr>

    </table>

</div>
3、修改内嵌的Portlet

Liferay Portal预制了数十个Portlet,提供了较为丰富的功能。我们可以按照自己的喜好,对这些内嵌Portlet进行适当的修改。

在portal工程项目中,依次打开目录portal-web->docroot->html->portlet,可以看到所有的内嵌Portlet都在这里面。如果仅仅是修改某些Portlet,只需要把它们复制到ext项目对应位置,然后修改其中的程序。比如,我们想修改Document Library和Document Library Display这两个Portlet,打算取消原来显示WebDAV URL的行。具体步骤如下:

(1)进入portal工程项目的portal-web->docroot->html->portlet目录中,把document_library目录复制到ext项目的对应目录ext-web->docroot->html->portlet中。

(2)进入ext项目,打开复制来的document_library目录,编辑view.jsp程序。在view.jsp中查找字符串WebDAV,把有关显示WebDAV URL行的语句注释掉,即添加注释符号,如下所示:

<!--

<c:if test="<%= WebDAVUtil.isEnabled(DLWebDAVStorageImpl.class.getName()) %>">

    <table class="lfr-table">

           … …

    </table>

</c:if>

-->

(3)如前所述,修改完成之后需要保存并部署,所作修改才能够起作用。

可见,修改原有的Portlet并不难,关键是对Portlet规范和架构熟悉,仔细读懂Portlet程序和配置定义。

4、开发新的Portlet

下面我们将参照Liferay网站的例子,介绍如何在扩展开发环境下,建立一个简单的Struts架构的 Portlet,起名为Library。在ext项目下,已经有一个示范性的reports Portlet存在,我们可以参考它来建立Library Portlet。

(1)定义Portlet

有关Portlet的配置文件全部放置在ext项目的ext-web\docroot\WEB-INF\目录中。

一个新的portlet还需要在portlet-ext.xml和lifray-portlet-ext.xml中进行定义。在portlet-ext.xml的<portlet-app>…..</portlet-app>之间已经有了reports Portlet的定义,在其后面添加有关Library的定义内容如下:

<portlet>

    <portlet-name>Library</portlet-name>

    <display-name>Library Portlet</display-name>

    <portlet-class>com.liferay.portlet.StrutsPortlet</portlet-class>

    <init-param>

           <name>view-action</name>

           <value>/ext/library/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>

    <security-role-ref>

           <role-name>power-user</role-name>

    </security-role-ref>

    <security-role-ref>

           <role-name>user</role-name>

    </security-role-ref>

</portlet>
----------
在lifray-portlet-ext.xml配置文件中,同样在reports Portlet的定义之后,添加Library的定义内容:

<portlet>

    <portlet-name>Library</portlet-name>

    <struts-path>ext/library</struts-path>

    <use-default-template>false</use-default-template>

</portlet>

在library-display.xml文件中把Library Portlet定义到sample(样品)分组中,即把<portlet id="Library" />添加到<category name="category.sample">的下面。

按照上面的定义,在Liferay中新建立了Library Portlet,且命名为Library,但在Liferay中的实际引用名称将是javax.portlet.title.Library,不够简练,因此需要把它重命名为便于识别的名称“图书馆”。

进入ext项目的ext-imp/src->content目录,打开Language-ext.properties资源文件,添加一条定义行:

javax.portlet.title.Library=图书馆

(2)定义网页的流转和显示方式

struts-config.xml用来定义网页的流转。该文件已经有了reports Portlet的定义,只需在</action-mappings>之前添加如下几行有关library的定义:

<!-- Library -->

<action path="/ext/library/view" forward="portlet.ext.library.view" />

<action path="/ext/library/add_book" type="com.ext.portlet.library.action.AddBookAction">

    <forward name="portlet.ext.library.error" path="portlet.ext.library.error" />

    <forward name="portlet.ext.library.success" path="portlet.ext.library.success" />

</action>

tiles-defs.xml定义网页的显示方式。同上,该文件中已经有了reports Portlet的定义,只需在</tiles-definitions>之前添加有关library的定义,内容如下:

<!-- Library -->

<definition name="portlet.ext.library" extends="portlet" />

<definition name="portlet.ext.library.view" extends="portlet.ext.library">

    <put name="portlet_content" value="/portlet/ext/library/view.jsp" />

</definition>

<definition name="portlet.ext.library.error" extends="portlet.ext.library">

    <put name="portlet_content" value="/portlet/ext/library/error.jsp" />

</definition>

<definition name="portlet.ext.library.success" extends="portlet.ext.library">

    <put name="portlet_content" value="/portlet/ext/library/success.jsp" />

</definition>

(3)建立处理程序

在ext-web\docroot\html\portlet\ext\目录中建立library目录,在此放置网页显示处理程序。

建立Portlet初始化程序init.jsp,内容如下:

<%@ include file="/html/common/init.jsp" %>

建立Portlet显示程序view.jsp,内容如下(注意,eclipse缺省使用的字符编码是ISO-8859-1,不能保存中文字符。因此需要修改程序文件的字符编码格式:用鼠标右键点文件名调出处理列表,再点击最后一项Properties。在Properties配置窗口的右边有“Text file encoding”选项,从“Other:”栏选择UTF-8,保存配置即可。):

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<%@ include file="/html/portlet/ext/library/init.jsp" %>

<br/>

   向图书馆增加书:

<br/><br/>

<form action="<portlet:actionURL windowState=

"<%= WindowState.MAXIMIZED.toString() %>">

<portlet:param name="struts_action" value="/ext/library/add_book" />

</portlet:actionURL>" method="post" name="<portlet:namespace />fm">     

    书 名:

    <input name="<portlet:namespace />book_title" size="20" type="text" value=""><br/><br/>

    <input type="button" value="Submit"

onClick="submitForm(document.<portlet:namespace />fm);">

</form>

<br/>

建立操作成功的处理程序success.jsp,内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<%@ include file="/html/portlet/ext/library/init.jsp" %>

<%

    String bookTitle = request.getParameter("book_title");

%>

<table align="center" cellspacing="10" cellpadding="3">

<tr>

    <td style="font-weight:bold">增加的书名:</td>

    <td><%= bookTitle %></td>

</tr>

</table>

建立操作错误的处理程序error.jsp,内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

出现错误,操作失败!

然后建立增加书目的事务处理程序AddBookAction.java。参照reports Portlet,我们在ext-imp/src目录中建立Java包com.ext.portlet.library.action,并建立Java程序AddBookAction.java内容如下:

package com.ext.portlet.library.action;

import javax.portlet.ActionRequest;

import javax.portlet.ActionResponse;

import javax.portlet.PortletConfig;

import javax.portlet.RenderRequest;

import javax.portlet.RenderResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import com.liferay.portal.struts.PortletAction;

public class AddBookAction extends PortletAction {

    public void processAction(

                  ActionMapping mapping, ActionForm form, PortletConfig config,

                  ActionRequest req, ActionResponse res) throws Exception {

           String bookTitle = req.getParameter("book_title");

         

           if ( null == bookTitle || "".equals(bookTitle) ) {

                  setForward(req, "portlet.ext.library.error");

           } else {

                  setForward(req, "portlet.ext.library.success");

           }

    }

    public ActionForward render(ActionMapping mapping, ActionForm form,

           PortletConfig config, RenderRequest req, RenderResponse res) throws Exception {

           if (getForward(req) != null && !getForward(req).equals("")) {

                  return mapping.findForward(getForward(req));

           } else {

                  return mapping.findForward("portlet.ext.library.view");

           }

    }

}

(4)部署和使用。

执行ant deploy部署ext项目到Tomcat服务器。启动Tomcat并打开Liferay Portal主页,以admin用户登录,向当前网页添加应用。可以看到,在sample(样品)分组下出现了我们刚建立的Library Portlet应用,把它拖放到网页上测试使用。

5、精简Liferay的Portlet

在Liferay Portal内置的几十个Portlet中,有许多是我们不需要的,比如有关网店购物的Portlet。通过在扩展配置文件中重新定义,我们可以把那些不需要的Portlet注销掉。

打开ext项目,进入ext-web->docroot->WEB-INF目录,编辑配置文件liferay-portlet-ext.xml。把需要注销的Portlet的定义项从注释框架中分离出来使它有效,再把<include>true</include>中的true修改为false即可。下面一段定义语句将把购物(Shopping)Portlet从Liferay Portal中屏蔽掉:

-->

    <portlet>

           <portlet-name>34</portlet-name>

           <struts-path>shopping</struts-path>

           <include>false</include>

    </portlet>

<!--

6、修改网页主题风格

Liferay支持主体风格插件。使用者可以按照规范制作个性化的网站主体格式,也可以从Liferay社区下载网友制作的插件使用。最新的Liferay 5.1.0版本对主题插件规范进行了修改,旧版本主题插件部署之后不能够使用了。好在新版本附带了一个主题插件Jedi,我们可以对照Jedi插件中的配置,把旧版主题插件部署之后经过修改,就可以使用了。下面以旧的主题插件包alef-theme-5.0.1.war为例,解释如何给5.1.0版本的Liferay添加新的主题插件:

(1)把alef-theme-5.0.1.war重命名为alef-theme.war,复制到Liferay的热部署目录C:\Documents and Settings\{用户名}\liferay\deploy\下。注意,本例的{用户名}为jingxiao。如果Tomcat已经启动Liferay在运行,几分钟之后该插件包将被部署到Tomcat的webapps目录下:

C:\Projects\liferay-5.1.0\tomcat-6.0\webapps\alef-theme

(2)分别进入Jedi和alef两个主题插件的WEB-INF目录。对比发现,Jedi插件多处了两个配置文件:liferay-look-and-feel.xml和liferay-plugin-package.xml。因此,我们把Jedi中的这两个文件复制到alef的对应目录中。

(3)修改alef-theme/WEB-INF/目录中新复制来的两个文件内容:把“liferay-jedi”修改为“alef”;把“Liferay Jedi”修改为“Alef”;把“liferay/liferay-jedi-theme/5.1.0.1/war”修改为“liferay/alef-theme/5.0.1/war”。

经过以上处理,5.0.1版本的alef-theme插件就可以在5.1.0版本的Liferay中使用了。

另外,对于主题插件,可以修改其中的CSS配置来调整外观格式。

7、其他

(1)修改缺省主页(guest)右上角显示的“Welcome!”。

尽管在Liferay的中文资源配置文件中已经把“Welcome”一词翻译为“欢迎”,但Liferay的缺省主页在中文界面仍然显示的是“Welcome”而不是“欢迎”。检查发现,该词是在数据库表user_中定义的,因此,要直接进入数据库,把user_表中缺省用户(defaultUser=1)的greeting值从“Welcome!”修改为“欢迎访问!”即可。

(2)修改缺省用户所在区域和语言

Liferay在system.properties资源文件中定义了缺省用户所在的国家/地区,语言和时区。我们可以重新定义这些缺省值。把portal项目portal-imp/src目录中的文件system.properties复制到ext项目对应目录中(ext-imp/src),并重命名为system-ext.properties(如果已经存在,先删除之)。然后打开文件进行编辑处理:先把那些不需要修改的参数项删除掉,重新定义如下值:

user.country = CN

user.language = zh_CN

user.timezone =GMT+8

(3)其它缺省参数的定义

Liferay还在portal-imp/src目录的portal.properties文件中定义了其它常用的缺省参数值,同样可以在对应目录ext-imp/src的portal-ext.properties文件中进行重新定义。比如把原来在portal.properties中定义的通告类型列表:

announcements.entry.types=general,news,test

重新在portal-ext.properties中定义为:

announcements.entry.types=general,news,notice

同样可以重新定义期刊文章的类型,直接定义为中文名称:

journal.article.types=动态信息,公告,通知,其它

以上简单介绍了有关Liferay Portal的应用开发方法。在实际应用中,还需要仔细研究Liferay的程序架构和源码,理解相关技术和规范(特别是JSR-168规范),才能够更好地
[size=large][/size]开发和应用Liferay Portal产品
分享到:
评论

相关推荐

    Liferay Portal应用之开发 (转)

    NULL 博文链接:https://wangpj.iteye.com/blog/859432

    利用Liferay开发portal应用(插件)

    把文件直接放到{user.home}/liferay/deploy文件夹中发布 博文链接:https://devilbaby.iteye.com/blog/163631

    Liferay_Portal6.0开发环境搭建

    Liferay portal 是世界领先的开源企业门户解决方案,它使用最新的Java和web2.0技术。可以运行在所有主流应用服务器和servlet容器,数据库和操作系统中,拥有超过700个部署组合。

    LIferay6开发书籍

    包括liferay的用户配置,系统接口,包括Liferay Portal 6 企业应用开发,Liferay 用户开发接口,Liferay+in+Action,Liferay 系统开发等

    liferay开发指南

    liferay是一个现成的,即开即用的,功能完备的门户网站Liferay Portal,是一个完美的桌面协同办公组合,完全为企业和机构设计,并且可以随意适应不同的应用Liferay Social Office. 提供60余种工具和一系列当今最富...

    Liferay 6.0.5开发指南.doc

    最新的liferay资料。Portal是基于Web的,以“应用整合”和“消除信息孤岛”为最终目的,提供单点登录、内容聚合、个性化门户定制等功能的综合信息系统。

    Liferay系列文章 7章 从介绍 到入门

    Liferay系列文章 7章 从介绍 到入门 本人整理好久的 比较全面 文档结构也是整理好的 包括Portal 单点登录 权限

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    格里芬,Neil Griffin是Liferay Portal的委员以及JSF开发团队领导者,并且是Portlet Faces项目的合作创始人。 目录 第I部分 javaserver faces框架 第1章 javaserver faces简介 1.1 什么是javaserver faces 1.2 ...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版).part1

    格里芬,Neil Griffin是Liferay Portal的委员以及JSF开发团队领导者,并且是Portlet Faces项目的合作创始人。 目录 第I部分 javaserver faces框架 第1章 javaserver faces简介 1.1 什么是javaserver faces 1.2 ...

    LP5-Foundation:Luminis Platform 5 基础主题

    它的目的只是展示如何将 Foundation 应用到 Ellucian Portal 中。 构建软件: 面向 Web 开发人员的 Eclipse Java EE IDE。 版本:Kepler Service Release 2 Luminis LP-5.2.1.0 Patch Build 103 Liferay Plugins ...

Global site tag (gtag.js) - Google Analytics