實踐Java
          Practice in Java
          posts - 6,  comments - 20,  trackbacks - 0
           

                創建一個名為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 <href="<portlet:renderURL windowState="<%= WindowState.MAXIMIZED.toString() %>" />&myparam=Mail">郵件系統:<%= prefs.getValue("param1""none"%> </a>
          4 <br>
          5 <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 弦驚塞外 閱讀(1424) 評論(7)  編輯  收藏

          FeedBack:
          # re: Liferay Portal學習
          2009-06-23 13:05 | 沙暖睡鴛鴦
          請問為什么我的頁面上“郵件系統”,“辦公系統”顯示亂碼啊,我用的是5.2.3  回復  更多評論
            
          # re: Liferay Portal學習 [未登錄]
          2009-07-02 14:19 | 弦驚塞外
          @沙暖睡鴛鴦


          頁面的字符集設置問題吧  回復  更多評論
            
          # re: Liferay Portal學習
          2009-09-01 10:11 | 彩霞
          為什么我啟動tomcat時有錯誤  回復  更多評論
            
          # re: Liferay Portal學習
          2010-02-25 17:22 | wt
          <%= prefs.getValue("param1", "none") %>
          我的prefs怎么無法識別啊,其余的和你的都一樣  回復  更多評論
            
          # re: Liferay Portal學習
          2010-06-01 13:36 | cf_yang
          @wt
          需要修改init.jsp
          PortletPreferences preferences = renderRequest.getPreferences();
          將preferences改為prefs  回復  更多評論
            
          # re: Liferay Portal學習
          2010-06-01 13:41 | cf_yang
          @彩霞
          我也出現了你描述的錯誤.找了好多資料,才發現需修改portlet-ext.xml
          將自帶portlet例子EXT_1中下面一行不要換行,一行顯示
          <resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
          可能是liferay的一個bug.
          你試一下看可以不.
            回復  更多評論
            
          # re: Liferay Portal學習
          2010-09-02 15:59 | 秋天的童話
          @沙暖睡鴛鴦
          你把jsp 頁面編碼為UTF-8 就ok  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          <2009年7月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿(3)

          隨筆檔案

          相冊

          搜索

          •  

          積分與排名

          • 積分 - 6301
          • 排名 - 2844

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 都匀市| 漳浦县| 潼南县| 石阡县| 青海省| 柳河县| 五台县| 融水| 汝城县| 郑州市| 迁安市| 郁南县| 苗栗市| 湘潭市| 唐海县| 乌拉特前旗| 长汀县| 黎川县| 武冈市| 江永县| 涟源市| 保德县| 南平市| 哈巴河县| 昔阳县| 轮台县| 灵台县| 湟源县| 通渭县| 平阳县| 临漳县| 龙陵县| 泉州市| 琼海市| 怀远县| 洪湖市| 鹿泉市| 临朐县| 宾川县| 阿瓦提县| 西昌市|