Terry.Li-彬

虚其心,可解天下之问;专其心,可治天下之学;静其心,可悟天下之理;恒其心,可成天下之业。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  143 随笔 :: 344 文章 :: 130 评论 :: 0 Trackbacks
 这里我们主要以4.0的版本为主,虽然还只是rc1版,但相信正式版应该很快就出来了。
一、portal服务器下载和运行环境
        首先访问liferay的官方网站http://www.liferay.com下载portal服务器,我们可以选择它的tomcat集成版下载,这样可以省去一些麻烦。
        然后启动bin目录下的statup.bat就启动了tomcat服务,然后通过http://localhost:8080访问就可以,默认的用户名和密码是 test@liferay.com/test。
       登录以后可以通过左方面的连接进入相关的操作:
       “我的帐户”里可以进行个人信息,欢迎信息,语言等基本信息的设置。
       “我的地方”可以分别进行个人,公开,gust,cms,suport等环境的设置,其实就相当于几个不同的虚拟站点。
       针对“我的地方“的每个站点可以进行”页设置“,即站点页面和级次的设置
      ”增加内容“则是对当前所在的页面进行内容的添加或改变页面模版(但目前感觉它的范本设置还存在问题),如果要删除的话直接点击每个portlet的删除按钮就可以了。
      另外在我的私人空间首页,即登录后默认的首页里,在”管理者“的portlet里我们可以进行相应的设置,像企业里可以改变站点的语言,banner图片等基本信息,portlets里可以进行目前的所有portlet的管理。
      这个里面基本上都是一些设置的熟悉和使用,相信每个地方都试一试就会有所了解了。

二、简单的开发自己的portlet

      做portlet开发通常首先也要建立一个独立的工程(避免和系统的混在一起不便于管理)。建立工程的时候不管是用jbuilder还是eclipse,和我们建立普通的web工程并没有什么不同。测试的例子以前网上有一篇介绍3.6.1的开发的写的很不错,我只是指出其中的一些不同和做一些补充,避免大家在多花去一些不必要的时间,我也是多花了几个小时才找出来的。

1、portlet程序编写
    其中HelloWorldPortlet和HelloJSPPortlet 是两个独立的portlet测试,只不过前面一个类似servlet直接输出,而后者使用了jsp页面的显示。

package com.lyj.portal;

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

public class HelloWorldPortlet extends GenericPortlet {
    public void doView(RenderRequest req, RenderResponse res)
            throws IOException, PortletException {
        res.setContentType("text/html");
        res.getWriter().println("HelloWorld liuyujun test one! 中文测试一");
    }

    public void doEdit(RenderRequest req, RenderResponse res)
            throws IOException, PortletException {
        res.setContentType("text/html");
        res.getWriter().println("HelloWorld liuyujun test two! 中文测试二");
    }
}


package com.lyj.portal;

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

public class HelloJSPPortlet 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);
    }
}

2、我们在工程的web的根目录下再增加HelloJSPPortlet需要用到的两个jsp文件
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
wayy to include JSPs。 view 成功
</td>
</tr>
</table>


edit.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
wayy to include JSPs。edit 万岁
</td>
</tr>
</table>

注意橙色背景的内容一定要加上,不然会有中文乱码问题

3、web.xml配置
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="TestPortal">
  <display-name>TestPortal</display-name>
  <context-param>
        <param-name>company_id</param-name>
        <param-value>liferay.com</param-value>
    </context-param>
  <listener>
    <listener-class>com.liferay.portal.shared.servlet.PortletContextListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>HelloWorldPortlet</servlet-name>
    <servlet-class>com.liferay.portal.servlet.PortletServlet</servlet-class>
    <init-param>
      <param-name>portlet-class</param-name>
      <param-value>com.lyj.portal.HelloWorldPortlet</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloWorldPortlet</servlet-name>
    <url-pattern>/HelloWorldPortlet/*</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>HelloJSPPortlet</servlet-name>
    <servlet-class>com.liferay.portal.servlet.PortletServlet</servlet-class>
    <init-param>
      <param-name>Portlet-class</param-name>
      <param-value>com.lyj.portal.HelloJSPPortlet</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloJSPPortlet</servlet-name>
    <url-pattern>/HelloJSPPortlet/*</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>

其中红色字体和蓝色字体的内容,如果以前使用3.6.1的一定要注意,蓝色部分以前是不需要加的,但是现在是必须的,如果不加的话,在portal管理列表里能列出我们开发的portlet,但在添加内容时无法找到我们自己的portlet。红色字体的部分相对原来多了shared,也就是它的类包进行了一定的调整,注意一下就可以了。

4、另外增加WEB-INF下增加portlet的私有配置文件
portlet.xml

<?xml version="1.0"?>
<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">
  <portlet>
    <portlet-name>HelloWorldPortlet</portlet-name>
    <display-name>HelloWorldPortlet</display-name>
    <portlet-class>com.lyj.portal.HelloWorldPortlet</portlet-class>
    <expiration-cache>0</expiration-cache>
    <supports>
      <mime-type>text/html</mime-type>
    </supports>
    <supports>
      <mime-type>text/html</mime-type>
      <portlet-mode>edit</portlet-mode>
    </supports>
    <portlet-info>
      <title>HelloWorldPortlet</title>
      <short-title>HelloWorldPortlet</short-title>
      <keywords>HelloWorldPortlet</keywords>
    </portlet-info>
    <portlet-preferences>
      <preference>
        <name>portlet-title</name>
        <value></value>
      </preference>
      <preference>
        <name>show-portlet-borders</name>
        <value>true</value>
      </preference>
    </portlet-preferences>
    <security-role-ref>
      <role-name>guest</role-name>
    </security-role-ref>
    <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>
    <portlet-name>HelloJSPPortlet</portlet-name>
    <display-name>HelloJSPPortlet</display-name>
    <portlet-class>com.lyj.portal.HelloJSPPortlet</portlet-class>
    <init-param>
      <name>view-jsp</name>
      <value>/view.jsp</value>
    </init-param>
    <init-param>
      <name>edit-jsp</name>
      <value>/edit.jsp</value>
    </init-param>
    <expiration-cache>0</expiration-cache>
    <supports>
      <mime-type>text/html</mime-type>
    </supports>
    <supports>
      <mime-type>text/html</mime-type>
      <portlet-mode>edit</portlet-mode>
    </supports>
    <portlet-info>
      <title>HelloJSPPortlet</title>
      <short-title>HelloJSPPortlet</short-title>
      <keywords>HelloJSPPortlet</keywords>
    </portlet-info>
    <security-role-ref>
      <role-name>guest</role-name>
    </security-role-ref>
    <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>

liferay-portlet.xml

<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 3.5.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_3_5_0.dtd">

<liferay-portlet-app>
  <portlet>
    <portlet-name>HelloWorldPortlet</portlet-name>
    <struts-path>HelloWorldPortlet</struts-path>
    <use-default-template>true</use-default-template>
    <instanceable>true</instanceable>
  </portlet>
  <portlet>
    <portlet-name>HelloJSPPortlet</portlet-name>
    <struts-path>HelloJSPPortlet</struts-path>
    <use-default-template>true</use-default-template>
    <instanceable>true</instanceable>
  </portlet>
  <role-mapper>
    <role-name>administrator</role-name>
    <role-link>Administrator</role-link>
  </role-mapper>
  <role-mapper>
    <role-name>guest</role-name>
    <role-link>Guest</role-link>
  </role-mapper>
  <role-mapper>
    <role-name>power user</role-name>
    <role-link>Power User</role-link>
  </role-mapper>
  <role-mapper>
    <role-name>user</role-name>
    <role-link>User</role-link>
  </role-mapper>
</liferay-portlet-app>

liferay-display.xml

<?xml version="1.0"?>
<!DOCTYPE display PUBLIC "-//Liferay//DTD Display 3.5.0//EN" "http://www.liferay.com/dtd/liferay-display_3_5_0.dtd">
<display>
  <category name="category.test">
    <portlet id="HelloWorldPortlet"/>
    <portlet id="HelloJSPPortlet"/>
  </category>
</display>

5、在WEB-INF下新建一个tld目录,把 tomcat\liferay\WEB-INF\tld\liferay-portlet.tld 复制过来就可以了
6、编译完成后,像我们正常的发布web的方式发布就可以了,比如修改tomcat的配置文件,直接用一个虚拟目录TestPortal指向我们工程的web 目录;或者把我们的web目录打包成TestPortal.war放到tomcat的webapps目录下就可以了。重新启动tomcat,登录后,我们会在portlet管理中发现增加了HelloWorldPortlet,HelloJSPPortlet两个portlet,在增加内容的时候在弹出的内容页面 测试(test)中多了上述的两个portlet。并且可以增加到我们的页面中看看效果吧。
posted on 2008-03-14 13:10 礼物 阅读(1587) 评论(0)  编辑  收藏 所属分类: Liferay