9 Replies Latest reply on Jun 9, 2006 2:51 PM by 702619

    [原创]Liferay 学习笔记

    702619
      本文主要涉及内容:
      修改网站的公司LOGO;
      增加用户;
      增加页面;
      Liferay中的Groups及用户、角色、页面组之间的关系;
      IE中修改文字大小对于portlet布局的影响;
      增加用户注册的入口;
      设置Liferay代理的方法;
      登录过程缓慢的解决方法;
      修改访客首页的方法。

      本文所述均经作者实践,本人的环境是tomcat 5.0.28,liferay 3.6.1,jdk 1.4.2_09,mysql 5.0.6


      修改网站的公司LOGO:
      通过admin(管理)portlet,以管理员登陆应可以在左侧看到,如果没有,从下面的portlet列表中添加。
      点击该portlet上的company链接,然后点logo图片下面的change链接。
      上传一个200*50的图片(它的注释写的不对,如果上传250*50的图片,版面将变得混乱),然后会自动刷新,
      显示出这个新LOGO。

      增加用户:
      通过admin(管理)portlet,以管理员登陆应可以在左侧看到,如果没有,从下面的portlet列表中添加。
      点击该portlet上的users链接,然后在右侧输入用户的信息,然后点击add按钮,将增加一个用户,如果已
      配置了mail服务器,将发送一封邮件给该新增用户,里面包括一些欢迎信息及初始密码等信息。
      默认的新增用户角色是Power Users 和Users。该用户会自动本地化,登陆后看到的界面是中文的。

      增加页面:
      通过admin(管理)portlet,以管理员登陆应可以在左侧看到,如果没有,从下面的portlet列表中添加。
      点击该portlet上的group链接,选择一个要增加页面的桌面,然后点击edit pages 按钮
      在page name文本框内输入页面名,然后点击add new Page按钮。
      在左侧的树中选择该新增的页面,然后在右侧的portlet列表中可以选择已有的portlet添加到页面上。
      点击update pages按钮。

      Liferay中的Groups及用户、角色、页面组之间的关系:
      进行配置管理时,强烈建议不要使用本地化的中文界面,有很多翻译的并不贴切,还不如直接看英文看的明白。
      我认为一个重大失误是Groups的翻译,应该翻译为页面组或桌面,而不是用户组,详情继续往下看。
      Liferay中的Groups是指页面组,或者说是桌面,并不是用户组。
      Liferay中用户、角色、页面组之间的关系我理解是这样的,portlet是最小元素,它们单独或共同完成一些
      业务操作。页面是包含一个或若干portlet的容器。页面组是一些页面的组合。角色如需对某些页面组(即这
      些页面组包含页面上的portlet)进行操作,将这些页面组划归为某个角色即可。一个用户可以拥有一个或多
      个角色,用户登录时,根据他所拥有的角色显示不同的页面组。用户也可以直接拥有页面组,用户登录时,将
      显示他拥有的页面组。它们之间的关系如附件中的图所示。
      实际操作过程中,发现必须把页面组(桌面)分配到用户,才会有效,而只分配给某用户隶属的角色,并不生
      效,不是很明白系统管理中把页面组分配给角色的意义何在,望与大家探讨,共同学习。
      在某个页面组(桌面)中创建页面时,可以指定页面的类型,portlet是指一些portlet的组合,url是指一个
      具体的页面url,可以引用其它服务器上的某业务的url,embedded也是引用一个url,但与url不同的是内嵌
      式,使用liferay的外观,内部是引用的页面显示的内容。
      创建页面组(桌面)时,有一个Friendly URL,这里一般不填写内容。对于guest用户,它们查看的是General
      Guest桌面,这里填写了Friendly URL 为/web/guest,其下的Company,Products,Downloads等都是作为
      General Guest桌面的页,每个都有一个Friendly URL,各个页面引用的portlet名称虽然一样,但显示内容
      并不相同,我觉得Liferay是根据Friendly URL的不同而显示不同的内容。以管理员身份查看General Guest
      桌面,将看到edit article,Preferences链接,可以编辑文章、banner,修改文章、banner的显示参数。

      IE中修改文字大小对于portlet布局的影响:
      上周为了查看Liferay自带的文档,里面有一些代码的文字非常小,因此调整了IE菜单“查看”-“文字大小”
      为最大,随后就把此事抛到了脑后。后来访问Liferay 的Home页面,发现本应显示在右侧宽列的“news”,
      “Calendar”等portlet都显示到了左边窄列,大惑不解。我尝试了很多办法,包括重新将Liferay 的tomcat
      包重新解压缩,重新安装jdk1.4,删除ie缓存、cookie …… 均告无效。刚才在另一台机器上部署之后,比
      较两台机器的异同,发现那些页面文字“Home A1”“Test 1”还有portlet标题文字怎么都那么大,再一看
      ie的文字大小配置,才恍然大悟,修改为“中”,一切恢复正常。为了不让遇到类似情况的朋友们走弯路,
      特意写出供大家参考。

      增加用户注册的入口:
      以管理员身份登录系统,点击admin portlet中的Company,在最下面的Allow strangers to create accounts?
      选择Yes,然后点击Update按钮,如果这时以为大功告成,你就错了,还要继续如下的配置。
      修改Groups,在左侧列表框选General Guest,然后点击下面的Edit Pages按钮,在左侧的树状结构中,点击
      Home,然后右边中间列出了所有Portlet的目录,选择tools,然后选My Account(w),将增加到下方的列表框
      中,再点击最下面的Update Page按钮,这时,点击左上角的sign out,回到首页,你看到新出现的My Account
      了么?在密码输入框下有一个Create Account链接,点它进入,就可以进行注册了,和通常的注册方法一样。
      令人奇怪的是,好像更改之后要稍等一会才能看到My Account,要不你就再开一个窗口访问http://localhost

      设置Liferay代理的方法:
      Liferay中有不少portlet访问了外部网站的资源,如果你的服务器可直接上网,不需要配置代理服务器即可正
      常浏览这些资源,但是有很多服务器为了安全并不是直接可以上网的,因此需要进行如下配置。
      先下载3.6.1的源代码包:liferay-portal-ent-3.6.1-src.zip,解压缩到一个文件夹,然后修改
      portal-ejb\classes\system.properties 中这两行
      #com.liferay.util.Http.proxy.host=192.168.0.200
      #com.liferay.util.Http.proxy.port=4480
      把行首的#去掉,然后把后面的host和port修改为你的代理服务器地址、端口,存盘后将这个文件拷贝到
      Tomcat\common\classes目录中,重起tomcat,现在你已可以访问外部网站提供的资源了。

      登录过程缓慢的解决方法:
      在修改代理的时候,发现portal-ejb\classes\system.properties 中有一行写的是:
      com.liferay.util.Http.timeout=5000
      如果你觉得无需访问外部网站,这个值可以只设置为500,存盘后复制到Tomcat\common\classes目录中,重起
      tomcat,登录时是否有了飞一般的速度?

      修改访客首页的方法:
      强烈建议在修改之前把相应的xsl文件备份!
      以管理员test@liferay.com登录,通过右上角的下拉框,选择“General Guest”桌面,这时看到的是访客的
      首页,只是在右下角多了Edit Article,Preferences链接。点击Edit Article,这时可以修改内容。建议在
      修改时,同时打开另一个窗口察看首页,这样可以方便的了解各个修改的内容将在页面的哪个位置显示。
      点击最下面的Template 旁边的Home Index,将对于Home Index模版进行修改。在新显示的页面上,可以对于
      模版名称,说明进行修改,同时可以上传xsl格式的文件来替换现有的模版。先点击上传框下面的Edit XSL
      Template按钮,将弹出新窗口显示当前的XSL的模版,不建议采用这种方式。点击Download XSL Template按
      钮,将xsl文件下载后使用XML编辑器进行修改编辑,然后再上传。Small Image是上传一个模版的缩略图或者
      指定internet上的一个图片作为模版缩略图(缩略图将替代模版说明显示于cms桌面上的 Journal portlet中
      的Templates 列表中)。
      对于XSL文件中各个标签的用法,可以参照现有xsl文件和页面显示来了解它们的含义。
      你的网站可能不需要显示Liferay的两个demo图片,因此你可以在下载的xsl文件中搜索http://demo.liferay.net
      把其所在的整个table删除,保存后上传,再用访客刷新首页,那两个图片是不是已经没有了?
      在 is a leading provider of open source... 之前的Liferay是一个图片,你的网站可能也不需要它,在xsl
      中查找<img src="@root_path@/image/image_gallery?img_id=22"/>,把这个删除,就不会看到那个图标了,
      当然,你还要在Edit Article页面中修改main text的内容。
      以此类推,你可以修改该模版的其他内容。
      至于首页上的其他内容,比如写着Liferay.com is built on Liferay Portal.的图片,要替换的话,在Edit
      Article页面中修改main image,可以从你本地电脑中选择一个适当大小的图片上传。
      在Edit Article页面的最下面,Structure旁边有一个HOME-INDEX的链接,点击之后进入Structure的修改页面,
      你可以增加或者删除一些网页元素,要注意的是,这里的修改是和模版密切相关的,如果你错误的删除了某些元素
      模版中找不到对应的内容,将无法正确显示。
      同样的,这里你也可以把xsl文件下载后编辑完成后再通过Edit XML Schema Definition进行更新(没有上传不
      是很方便)。
      也许有人要问,那个访客登录的输入框,我怎么在xsl文件中没有看到相应的form,input什么的?
      你在下载的template xsl文件中搜索<runtime-portlet name="58" />,然后再到liferay\WEB-INF\liferay-
      portlet.xml文件中搜索58,现在就明白了吧。它的登录入口是作为一个portlet加入到home-index中的。你可以
      尝试在适当位置添加<runtime-portlet name="2" /> <runtime-portlet name="34" /> 等访客有权限view的
      portlet,然后看一下效果。
      访客可看的其他页面,诸如companys,downloads等,也可按照此方法逐一修改。


      参考资料:
      1. Liferay Portal 二次开发指南 柯自聪
      2. www.liferay.com 的在线文档
        • 1. Re: [原创]Liferay 学习笔记
          702619
          很高兴看到自己的文档对楼主有益。

          加油加油。

          大家一起来共享经验和收获,共同进步。
          • 2. Re: [原创]Liferay 学习笔记
            702619
            educhina ,牛人啊,呵呵。看了一下你的blog,很不错哟
            • 3. Re: [原创]Liferay 学习笔记
              702619
              楼主写的不错,辛苦了!我也是最近在研究Liferay,用了一段时间,最近在开发集成自己应用的Portlet,也有一些经验,但是我比较懒,不怎么喜欢写文章 呵呵 但是我比较喜欢发现问题就及时的讨论,所以建了关于开源Portal研究的QQ群组,欢迎有兴趣的朋友加盟一起讨论,分享大家的经验,共同提高!群号:13097018
              • 4. 解决portlet标题中文问题
                702619
                解决portlet标题中文问题

                开发环境是:tomcat 5.0.28,liferay 3.6.1,jdk 1.4.2_09,mysql 5.0.6,ant 1.6.2,jikes 1.21

                1,修改tomcat\liferay\WEB-INF\portlet-ext.xml,在其中增加自己的portlet信息,比如:
                <portlet>
                <portlet-name>myportlet</portlet-name>
                <display-name>My Portlet</display-name>
                <portlet-class>com.ext.portlet.my.MyPortlet</portlet-class>
                <init-param>
                <name>edit-jsp</name>
                <value>/html/portlet/ext/my/edit.jsp</value>
                </init-param>
                <init-param>
                <name>view-jsp</name>
                <value>/html/portlet/ext/my/view.jsp</value>
                </init-param>
                <expiration-cache>0</expiration-cache>
                <supports>
                <mime-type>text/html</mime-type>
                <portlet-mode>edit</portlet-mode>
                </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>
                强烈建议在这个文件头部增加
                <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
                并且使用xmlspy来编写xml文件,xmlspy会根据头部的dtd/xsd文件自动给你校验xml文件的合法性,避免诸如字母大小写问题导致的错误。我在实验的时候,因为大小写的问题浪费了n个小时。
                2,修改tomcat\liferay\WEB-INF\liferay-portlet-ext.xml,增加自己的portlet信息,比如:
                <portlet>
                <portlet-name>myportlet</portlet-name>
                <struts-path>ext/my</struts-path>
                <use-default-template>true</use-default-template>
                </portlet>
                3,修改tomcat\liferay\WEB-INF\liferay-display.xml,在<category name="category.test">中增加类似如下信息:
                <portlet id="myportlet" />
                4,修改tomcat\common\classes\content\Language-ext.properties,增加portlet的title的英文显示:
                javax.portlet.title.myportlet=My Self Portlet
                在这个目录下增加文件Language-ext_zh_CN.properties.native,增加portlet的title的中文显示:
                javax.portlet.title.myportlet=我自己的portlet
                要使用native2ascii来把这个文件转码。命令行输入
                cd tomcat\common\classes\content
                native2ascii Language-ext_zh_CN.properties.native Language-ext_zh_CN.properties
                该命令存在于jdk中,须确认你的path中包含jdk的bin目录
                5、创建文件com/ext/portlet/my/MyPortlet.java,并且编译成class文件。我是在目录ext/ext-ejb/src下创建,然后在ext-ejb目录下用ant compile生成的。
                ext目录是通过下载源码包后解压缩,然后在目录中执行ant start,然后再执行ant build-ext,会在你的c盘创建相应目录。
                MyPortlet.java可以这样写:

                package com.ext.portlet.my;

                import javax.portlet.GenericPortlet;
                import java.io.IOException;
                import javax.portlet.PortletException;
                import javax.portlet.PortletRequestDispatcher;
                import javax.portlet.RenderRequest;
                import javax.portlet.RenderResponse;

                /**
                * @author lrc 2006-01-13
                */
                public class MyPortlet extends GenericPortlet {
                public void doView(RenderRequest req, RenderResponse res) throws IOException, PortletException {
                res.setContentType("text/html");
                String jspName = getPortletConfig().getInitParameter("view-jsp");
                PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);
                rd.include(req, res);
                }

                public void doEdit(RenderRequest req, RenderResponse res) throws IOException, PortletException {
                res.setContentType("text/html");
                String jspName = getPortletConfig().getInitParameter("edit-jsp");
                PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);
                rd.include(req, res);
                }

                public static void main(String[] args) {
                }
                }
                6、把生成的class文件放到tomcat\common\lib\ext\ext-ejb.jar中
                7、在tomcat\liferay\html\portlet\ext目录下创建目录my,在my目录中创建文件view.jsp,内容如下:
                <%@ page language="java" contentType="text/html;charset=GBK"%>
                <table cellpadding="8" cellspacing="0" width="100%">
                <tr>
                <td>
                <font class="Portlet-font" style="font-size: x-small;">
                This is a <b>中文Sample JSP Portlet</b> used in viewing model. Use this as a quick way to include JSPs.
                </font>
                </td>
                </tr>
                </table>
                edit.jsp的内容类似
                8、启动tomcat,访问http://localhost:8080/,把刚刚创建的portlet添加进去,然后更改账户的默认语言为中文,再回到首页,你可以看到熟悉的中文出现在portlet标题处。

                参考了http://forums.liferay.com/index.php?showtopic=3565
                官网的文章中也包含错误。sign
                • 5. Re: [原创]Liferay 学习笔记
                  702619
                  我象请教如何实现Liferay和数据库如sqlserver之间的访问,我试过了,加用户之类的都没有问题,但其他的就出错,好像是数据库无法连接
                  • 6. Re: [原创]Liferay 学习笔记
                    702619
                    好样的,
                    • 7. Re: [原创]Liferay 学习笔记
                      702619
                      收益非浅,谢谢了!!!
                      • 8. Re: [原创]Liferay 学习笔记
                        702619
                        Liferay 是如何实现SSO的呢?
                        比如:和lotus开发的oa系统,或其他j2ee构架的web系统?
                        • 9. Re: [原创]Liferay 学习笔记
                          702619
                          学习一下