創(chuàng)建一個(gè)名為MyPortlet類(lèi)繼承至com.liferay.portlet.StrutsPortlet類(lèi).StrutsPortlet實(shí)現(xiàn)了Liferay的portlet規(guī)范,繼承后只需覆蓋感興趣的方法即可,如下代碼:
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", "")); //測(cè)試一下配置的參數(shù)讀取
25 super.doView(renderRequest, renderResponse);
26 }
27
28 }
29
建立一個(gè)Struts的Action用于處理portlet的請(qǐng)求:
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 //根據(jù)portlet的窗口變化Forward到不同的頁(yè)面
22 if (renderRequest.getWindowState().equals(WindowState.NORMAL)) {
23 return mapping.findForward("portlet.ext.myportlet.view");
24 }
25 else {
26 List reports = new ArrayList();
27 //測(cè)試一下從Action到頁(yè)面的對(duì)象傳遞
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 }
配置一個(gè)portlet實(shí)例,在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處理對(duì)象 -->
5 <init-param>
6 <name>view-action</name>
7 <value>/ext/myportlet/view_myportlet</value><!-- portal首頁(yè)小窗口的指向路徑 -->
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><!-- 代碼中要讀的測(cè)試參數(shù) -->
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" /><!-- 增加到這個(gè)分組,可以任意指定組 -->
8 </category>
portlet頁(yè)面與處理名稱(chēng)配置,在/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>
處理頁(yè)面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>
通過(guò)上面的簡(jiǎn)單配置,可以基本可以看出portlet在Liferay portlet容器中怎樣配置的,也可以初步了解到portal容器怎樣加載和初始化這些portlet的了,上述配置中有幾個(gè)JSP頁(yè)面這幾個(gè)頁(yè)面可以先用Ext工程自帶的例子來(lái)創(chuàng)建這些頁(yè)面文件,Liferay提供一些用于支持portal的標(biāo)簽.
在Ext工程目錄中創(chuàng)建頁(yè)面目錄 /ext/ext-web/docroot/html/portlet/ext/myportlet 并增加如下頁(yè)面文件,文件名必須和tiles-defs.xml文件中指定的對(duì)應(yīng).
init.jsp
view_myportlet.jsp --打開(kāi)portlet的顯示頁(yè)面
view.jsp --在portal首頁(yè)顯示小窗口的頁(yè)面
view.jsp內(nèi)容
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">郵件系統(tǒng):<%= prefs.getValue("param1", "none") %> </a>
4 <br>
5 <a href="<portlet:renderURL windowState="<%= WindowState.MAXIMIZED.toString() %>" />&myparam=OA">辦公系統(tǒng):<%= prefs.getValue("param2", "none") %> </a>
6
windowState是portlet規(guī)范里內(nèi)置參數(shù),myparam是自定義參數(shù),用于做測(cè)試.
編輯完后使用ANT部署,然后啟動(dòng)Tomcat,將看到剛才創(chuàng)建的portlet已經(jīng)成功部署到應(yīng)用當(dāng)中
注意:在配置portlet的時(shí)候我遇到了配置參數(shù)被寫(xiě)入數(shù)據(jù)庫(kù)了,在測(cè)試的時(shí)候配置參數(shù)與顯示出來(lái)老不能同步,我直接從數(shù)據(jù)庫(kù)表中給D掉了,目前還沒(méi)研究這個(gè)部署的詳細(xì)問(wèn)題!
OK!!第一個(gè)例子成功了!
posted on 2009-03-10 10:06
弦驚塞外 閱讀(1419)
評(píng)論(7) 編輯 收藏