- 浏览: 595136 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (268)
- ext基础 (72)
- Java基础 (68)
- jquery (14)
- oracle (21)
- sqlserver (7)
- linux (2)
- webserver (1)
- C/C++ (1)
- sql (9)
- IDE (2)
- java 智能卡 (1)
- mysql (6)
- ibatis (2)
- struts2 (3)
- cvs (1)
- 服务器 (1)
- html (11)
- freemarker (4)
- liferay (2)
- jMS (1)
- iphone (1)
- c# (1)
- Android (11)
- wince (6)
- javascript (4)
- ps (1)
- hibernate (1)
- 其他 (3)
最新评论
-
ilyq:
请问,px.gif 在哪里
斜线表头 -
jisang:
没看懂,第一个org.js和最后的js什么关系,可否发我一份完 ...
用ExtJS 实现动态载入树(Load tree) -
JavaStudyEye:
我去,能否搞个正确点的,,,
<#list ...
freemarker 遍历map 对象 -
PangSir:
大爱,简直是大爱!!困扰这么久以来的问题,虽然知道是CSS的问 ...
ExtJs checkbox radiobox 问题 汇总 -
skynet_java:
有demo嘛!邮箱:think_world@foxmail.c ...
消息推送服务需求 - 服务器开发、客户端开发
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产品
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产品
发表评论
-
将博客搬至CSDN
2023-02-06 16:57 329https://www.iteye.com/blog/user ... -
jQuery Include HTML、插入html、jquery替代iframe
2014-03-09 16:04 3612jQuery能做到的比iframe连接另一个网页html內容來 ... -
重写window.alert方法
2013-05-03 08:51 1182见上传文件 -
兼容IE圆角
2013-04-25 21:10 1078<div class="listBar&quo ... -
index 模板
2013-04-25 20:50 0<@goods_list type="best ... -
斜线表头
2013-03-26 13:10 11939------------------------------ ... -
iframe
2012-08-06 12:23 813<script type="text/ja ... -
浏览器 pdf
2012-07-20 10:56 887今天研究的是: web浏览器中打开 pdf文件 步骤一:在三大 ... -
js页面跳转
2012-07-18 09:47 0<script> var currentPag ... -
liferay Portal (1) 应用之配置
2012-02-27 13:59 1316Liferay Portal缺省只有一 ... -
笔记1
2011-11-07 13:06 886------------------------------- ... -
html 导航栏
2011-08-08 09:17 1569二级导航栏 -
动态语句 eval
2011-07-05 15:44 1192<div class="quote_title ... -
freemarker 遍历map 对象
2011-06-17 15:23 31258当Map里面的key 是Object(String,Integ ... -
struts 2 class ajax
2011-06-16 14:04 12231. 空格 value 2. ... -
ext form
2011-05-18 15:25 1023//grid1定义的grid var record = gr ... -
combox
2011-04-27 10:55 15981.服务器数据作为ComboBox的数据源 实例 首先从服务 ... -
ext grid 单元格
2010-12-29 11:17 1045listeners : { cellcli ... -
combox 默认值
2010-12-20 10:35 3023[ {"abbr":&quo ... -
Ext.DateField 格式
2010-12-17 10:11 1463Ext.DatePicker,该类为我们提供了一个占地面积很广 ...
相关推荐
1. **Liferay Portal 架构** Liferay Portal的核心架构基于Java EE标准,包括Servlet容器、EJB、JMS和JPA等。它采用MVC(模型-视图-控制器)设计模式,提供了一个可扩展的框架,支持portlet、主题、布局和服务的...
### Liferay Portal 二次开发指南 ...总之,Liferay Portal的二次开发不仅涉及技术层面的编码和配置,还需要深入理解其架构和使用模式,才能充分利用其强大功能,构建出既高效又个性化的门户应用。
《Liferay Portal应用之开发》 Liferay Portal是一款开源的企业级门户平台,它提供了一整套解决方案,用于构建、管理和部署Web应用程序。本篇将深入探讨Liferay Portal的开发技术,帮助开发者理解其核心概念,掌握...
在这个开发实例中,我们将深入探讨四个Liferay Portal MVC(Model-View-Controller)应用的实践案例,这些实例可以帮助开发者更好地理解如何在Liferay环境中进行portlet开发。 首先,让我们了解MVC模式在Liferay中...
**Liferay Portal** 是一款功能强大的企业级门户平台,支持多种应用集成和技术扩展。它不仅提供了丰富的特性满足企业日常需求,同时也支持高度定制化开发。本文档旨在指导开发者如何进行 Portlet 的开发并部署在 ...
在Liferay Portal开发中,JSP(JavaServer Pages)扮演着重要的角色,它是构建动态Web应用的一种技术。本文将深入探讨如何使用JSP进行Liferay Portlet的开发,主要包括新建WebProject、添加必要的Liferay文件、配置...
搭建Liferay Portal的开发环境是一项细致且复杂的过程,涉及到多个步骤和组件的配合。本文将根据给定的文件信息,详细解析如何从零开始构建一个完整的Liferay开发环境,包括必要的准备、具体步骤以及关键配置。 ###...
综上所述,这本书提供了关于Liferay Portal 5.2版本的系统开发知识,包括如何构建基于Java的企业内部网系统。内容包含了专业作者的深入见解,版权信息、法律声明以及出版社信息等细节,确保读者能够全面地了解书籍的...
### Liferay Portal 5.2 开发指南 #### 一、引言 Liferay Portal是一款开源的企业级门户平台,能够帮助企业构建高度定制化的内部网、外部网和社交媒体应用。本书《Liferay Portal 5.2 Systems Development》由Jonas...
Liferay Portal 6具有高度的定制化能力,企业可以根据自身需求调整界面布局、添加插件或开发自定义应用程序。平台基于开放标准,易于与其他系统集成,提升了系统的灵活性和可扩展性。 ##### 5. 安全与权限管理 平台...
1. 动态系统构建:开发者可以利用Liferay提供的功能,创建能够响应用户行为的动态Web应用。 2. 内容丰富性:Liferay支持多种类型的内容管理,包括文本、图片、视频等多媒体内容,为用户提供丰富多彩的信息体验。 3...
通过这份文档,开发者和管理员可以深入理解Liferay Portal的工作机制,学习如何开发和部署portlet,以及如何利用Liferay Portal构建和管理智慧社区或企业信息系统。无论是初学者还是经验丰富的开发者,都能从中受益...
它假设读者已经具备一定的Java编程基础,并了解基本的Web应用开发概念。 - **适用版本**:文档基于Liferay 4.3版本编写,部分特性可能与早期或后期版本存在差异。 - **关联文档**: - Liferay Portal 4—自定义指南...
Liferay Portal 是一个开源的企业级门户平台,它允许用户创建、管理和定制各种Web应用程序和内容。这个求助主题可能涉及到在使用Liferay Portal过程中遇到的问题,或者是寻求关于如何更有效地利用其特性和功能的建议...
### Liferay Portal 二次开发指南 #### 一、Liferay Portal 概览 **Liferay Portal** 是一款开源的企业级门户平台,它基于Java技术构建,支持多种标准,包括JSR 168和WSRP等。Liferay Portal 提供了一个高度可定制...