創建一個名為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
弦驚塞外 閱讀(1419)
評論(7) 編輯 收藏