创建一个名为MyPortlet类继承至com.liferay.portlet.StrutsPortlet类.StrutsPortlet实现了Liferay的portlet规范,继承后只需覆盖感兴趣的方法即可,如下代码:
1 package com.ext.portlet.myportlet;
2
3 import com.liferay.portlet.StrutsPortlet;
4
5 import java.io.IOException;
6
7 import javax.portlet.PortletException;
8 import javax.portlet.PortletPreferences;
9 import javax.portlet.RenderRequest;
10 import javax.portlet.RenderResponse;
11
12 /**
13 * <a href="ReportsPortlet.java.html"><b><i>View Source</i></b></a>
14 *
15 * @author Brian Wing Shun Chan
16 *
17 */
18 public class MyPortlet extends StrutsPortlet {
19
20 public void doView( RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {
21
22 PortletPreferences prefs = renderRequest.getPreferences();
23
24 System.out.println(prefs.getValue("param1", "")); //测试一下配置的参数读取
25 super.doView(renderRequest, renderResponse);
26 }
27
28 }
29
建立一个Struts的Action用于处理portlet的请求:
1 package com.ext.portlet.myportlet.action;
2 import java.util.ArrayList;
3 import java.util.List;
4
5 import javax.portlet.PortletConfig;
6 import javax.portlet.RenderRequest;
7 import javax.portlet.RenderResponse;
8 import javax.portlet.WindowState;
9 import org.apache.struts.action.ActionForm;
10 import org.apache.struts.action.ActionForward;
11 import org.apache.struts.action.ActionMapping;
12
13 import com.liferay.portal.struts.PortletAction;
14 public class ViewMyPortletAction extends PortletAction {
15
16 public ActionForward render(
17 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
18 RenderRequest renderRequest, RenderResponse renderResponse)
19 throws Exception {
20
21 //根据portlet的窗口变化Forward到不同的页面
22 if (renderRequest.getWindowState().equals(WindowState.NORMAL)) {
23 return mapping.findForward("portlet.ext.myportlet.view");
24 }
25 else {
26 List reports = new ArrayList();
27 //测试一下从Action到页面的对象传递
28 reports.add("甲");
29 reports.add("乙");
30 reports.add("丙");
31 reports.add("丁");
32 reports.add("戊");
33 renderRequest.setAttribute("myportlet", reports);
34
35 return mapping.findForward("portlet.ext.myportlet.view_myportlet");
36 }
37 }
38
39 }
配置一个portlet实例,在Ext工程下文件:/ext/ext-web/docroot/WEB-INF/portlet-ext.xml 添加如下配置:
1 <portlet>
2 <portlet-name>EXT_2</portlet-name>
3 <display-name>MyPortlet</display-name>
4 <portlet-class>com.ext.portlet.myportlet.MyPortlet</portlet-class><!-- 刚才建立的portlet处理对象 -->
5 <init-param>
6 <name>view-action</name>
7 <value>/ext/myportlet/view_myportlet</value><!-- portal首页小窗口的指向路径 -->
8 </init-param>
9 <expiration-cache>0</expiration-cache>
10 <supports>
11 <mime-type>text/html</mime-type>
12 </supports>
13 <resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
14 <portlet-preferences>
15 <preference>
16 <name>param1</name><!-- 代码中要读的测试参数 -->
17 <value>Mail</value>
18 </preference>
19 <preference>
20 <name>param2</name>
21 <value>OA</value>
22 </preference>
23 </portlet-preferences>
24 <security-role-ref>
25 <role-name>power-user</role-name>
26 </security-role-ref>
27 <security-role-ref>
28 <role-name>user</role-name>
29 </security-role-ref>
30 </portlet>
/ext/ext-web/docroot/WEB-INF/liferay-portlet-ext.xml 文件的配置,增加如下
1 <portlet>
2 <portlet-name>EXT_2</portlet-name>
3 <struts-path>ext/myportlet</struts-path>
4 <use-default-template>false</use-default-template>
5 </portlet>
定义portlet控制面板中portlet的分组/ext/ext-web/docroot/WEB-INF/liferay-display.xml
1 <category name="category.sample">
2 <portlet id="47" />
3 <portlet id="48" />
4 <portlet id="50" />
5 <portlet id="66" />
6 <portlet id="EXT_1" />
7 <portlet id="EXT_2" /><!-- 增加到这个分组,可以任意指定组 -->
8 </category>
portlet页面与处理名称配置,在/ext/ext-web/docroot/WEB-INF/tiles-defs.xml文件下添加:
1 <definition name="portlet.ext.myportlet.view" extends="portlet">
2 <put name="portlet_content" value="/portlet/ext/myportlet/view.jsp" />
3 </definition>
4
5 <definition name="portlet.ext.myportlet.view_myportlet" extends="portlet">
6 <put name="portlet_content" value="/portlet/ext/myportlet/view_myportlet.jsp" />
7 </definition>
处理页面portlet的StrutsAction配置 /ext/ext-web/docroot/WEB-INF/struts-config.xml
1 <action path="/ext/myportlet/view_myportlet" type="com.ext.portlet.myportlet.action.ViewMyPortletAction">
2 <forward name="portlet.ext.myportlet.view" path="portlet.ext.myportlet.view" />
3 <forward name="portlet.ext.myportlet.view_myportlet" path="portlet.ext.myportlet.view_myportlet" />
4 </action>
通过上面的简单配置,可以基本可以看出portlet在Liferay portlet容器中怎样配置的,也可以初步了解到portal容器怎样加载和初始化这些portlet的了,上述配置中有几个JSP页面这几个页面可以先用Ext工程自带的例子来创建这些页面文件,Liferay提供一些用于支持portal的标签.
在Ext工程目录中创建页面目录 /ext/ext-web/docroot/html/portlet/ext/myportlet 并增加如下页面文件,文件名必须和tiles-defs.xml文件中指定的对应.
init.jsp
view_myportlet.jsp --打开portlet的显示页面
view.jsp --在portal首页显示小窗口的页面
view.jsp内容
1 <%@ page contentType="text/html; charset=UTF-8"%>
2 <%@ include file="/html/portlet/ext/reports/init.jsp" %>
3 <a href="<portlet:renderURL windowState="<%= WindowState.MAXIMIZED.toString() %>" />&myparam=Mail">邮件系统:<%= prefs.getValue("param1", "none") %> </a>
4 <br>
5 <a href="<portlet:renderURL windowState="<%= WindowState.MAXIMIZED.toString() %>" />&myparam=OA">办公系统:<%= prefs.getValue("param2", "none") %> </a>
6
windowState是portlet规范里内置参数,myparam是自定义参数,用于做测试.
编辑完后使用ANT部署,然后启动Tomcat,将看到刚才创建的portlet已经成功部署到应用当中
注意:在配置portlet的时候我遇到了配置参数被写入数据库了,在测试的时候配置参数与显示出来老不能同步,我直接从数据库表中给D掉了,目前还没研究这个部署的详细问题!
OK!!第一个例子成功了!
posted on 2009-03-10 10:06
弦惊塞外 阅读(1406)
评论(7) 编辑 收藏