Portlet插件開發說明文檔

Portlet插件開發說明文檔

概述

Liferay幾種開發:

1、 Portlets

一個插件中可以有多個portletportlet開發可以用StrutsSpring MVCJava Server Faces (JSF)等框架,也可以使用Liferay特定的框架:MVCPortlet或者AlloyPortlet等。

可以將多種插件類型放到一個war包中,如將主題和佈局合併在一起(待驗證)。

2、 Themes(自定義外觀和風格)

使用CSSVelocity模板來改變門戶的外觀和風格。

3、 Layout Templates

佈局改變的是portlet在頁面中的佈局,而不是portlet的外觀和風格,佈局使用Velocity或者Freemarker模板。

4、 Hooks

Hook插件可以用來修改portal properties或者在啓動、關閉、登錄、註銷、session創建和session註銷時執行自定義action,除此之外,還有其它的一些功能,不在這裏說明。

5、 Ext Plugins

Ext插件在修改Liferay核心時提供了最大的靈活性。

Portlet開發過程

創建工程圖解

通過Liferay開發工具來創建








生成如下結構的工程:


配置文件說明

配置文件存放在docroot/WEB-INF文件夾中。

portlet.xmlJSR-286標準的portlet配置文件。

liferay-display.xml:Liferay特有的配置文件,描述了該portlet在添加應用時將展示在哪個類型下面。


liferay-portlet.xml:Liferay特有的配置文件,該文件描述了一些針對安裝在Liferay門戶服務器上的portletJSR-286標準)增加的配置(Liferay特有的)。例如,你可以設置某個portlet是否可以實例化多次(在同一個頁面中相同的portlet是否可以添加多次)。詳細信息可以查看位於Liferay源代碼definitions文件夾中對應的DTD文件。

liferay-plugin-package.properties:Liferay特有的配置文件,該文件描述了Liferay熱部署插件的一些信息。可以在這裏配置依賴的jar包,如果一個portlet插件需要依賴一些liferay特有的jar包,可以在這裏指定,熱部署的時候,會複製這些指定的jar包到相應的目錄下。這樣就不需要自己引用這些jar包了,也就可以減少war包的體積了。

下面是對這些配置文件的一些說明:

docroot/WEB-INF/portlet.xml:



下面是對每個元素所代表的含義的一些總結:

portlet-name

該元素包含了portlet的標準名稱,每個portlet名稱在portlet應用程序(即portlet插件)中是唯一的。在liferay門戶中,這也被稱爲portlet ID

display-name

The display-name type contains a short name that is intended to be displayed by tools. It is used by display-name elements. The display name need not be unique.

portlet-class

包含完整的類名,處理對portlet的調用。

init-param

portlet的初始化參數,包含成對的<name/><value/>子元素。

expiration-cache

過期時間定義portlet輸出緩存在幾秒鐘後失效。-1表示輸出不緩存。

supports

supports包含支持的MIME類型。表示爲portlet支持的portle模式指定一個特定的內容類型。所有的portlet都必須支持view模式。

portlet-info

定義portlet的信息。

security-role-ref

該元素包含了對web應用程序代碼中引用的安全角色的聲明。特別是在liferay中,role-name表明了哪個角色可以訪問該portlet

docroot/WEB-INF/liferay-portlet.xml:



除了標準的portlet.xml配置之外,還有可選的liferay獨有的針對安裝在Lifeary門戶服務器上的java標準的portlet增加的一些配置。插件SDK會將描述信息設置爲如下:

其中:

portlet-name:

必須與portlet.xml文件中的portle-name一致。

icon

portlet圖標路徑

instanceable

表示在同一頁面上可以出現多個該portlet的實例。

header-portlet-css

在頁面的<head>中包含的css文件。

footer-portlet-javascript

在頁面最後</body>之前的js文件。

更多的元素可以查看位於Liferay源代碼definitions文件夾中對應的DTD文件。

新建service.xml




點“Finish”後,WEB-INF目錄下會出現新建的service.xml文件。



執行build-service,生成相應的service接口類、service實現類、hibernate映射、spring配置等文件。執行成功後,refresh下工程。


AJAX請求

AJAX前臺請求url

<portlet:resourceURL var="url">

<portlet:param name="param1" value="value1"/>

<portlet:param name="param2" value="value2"/>

</portlet:resourceURL>

請求示例:

$.ajax({

type: 'POST',

   url: '<%=url %>',

   data: {"number":number},

   dataType: 'text',

   success: function(data){

   $("#<portlet:namespace/>datas").html(data);

   }

});

AJAX後臺代碼:

public void serveResource(ResourceRequest resourceRequest,

ResourceResponse resourceResponse) throws IOException,

PortletException {

int number = ParamUtil.getInteger(resourceRequest, "number");

HttpServletResponse response = PortalUtil.getHttpServletResponse(resourceResponse);

response.setContentType(ContentTypes.TEXT_PLAIN_UTF8);

response.setHeader(HttpHeaders.CACHE_CONTROL"no-cache");

PrintWriter pw = response.getWriter();

pw.write(""+(number+1)+"次請求。");

pw.close();

}

表單提交actionURL

<portlet:actionURL var="addURL"><portlet:param name="<%= actionRequest.ACTION_NAME %>" value="add" /></portlet:actionURL>

或者

<portlet:actionURL var="addURL" name="add"></portlet:actionURL>

<form action="<%=addURL %>" method="post" name="<portlet:namespace />fm2">

<input name="<%= Constants.CMD %>" type="hidden" value="edit" />

<input name="userName" type="text" value="test2" />

<input name="password" type="text" value="123@abc" />

<input type="submit" value="submit"/>

</form>

其中<%= ActionRequest.ACTION_NAME %>的值對應後臺的方法名:

public void add(ActionRequest actionRequest,

ActionResponse actionResponse) throws Exception {

String cmd = ParamUtil.getString(actionRequest, Constants.CMD);

String userName = ParamUtil.getString(actionRequest, "userName");

String password = ParamUtil.getString(actionRequest, "password");

_log.info("cmd:"+cmd);

_log.info("userName:"+userName);

_log.info("password:"+password);

}

注意:不能使用renderURL

1renderRequest沒有ACTION_NAME字段;

2renderURL標籤沒有name屬性。

頁面跳轉renderURL

跳轉url

<portlet:renderURL>

<portlet:param name="jspPage" value="/html/commodities/edit.jsp" />

</portlet:renderURL>

參數jspPage表示將要跳轉到的頁面。

示例如下:

<a href="<portlet:renderURL><portlet:param name="jspPage" value="/html/commodities/edit.jsp" /></portlet:renderURL>">edit</a>

name必須爲jspPage,否則跳不過去

插件部署

插件部署有很多種方法,其中一種方法:

portlet插件部署到tomcat後,通過命令 jar –cvf commodities.war  *.* 打成war包(如果是WebLogic部署直接壓縮成rar包即可)。

如果是在WebSphere上部署,需要在web.xml中加入下列一段話:

<context-param>

<param-name>com.ibm.websphere.portletcontainer.PortletDeploymentEnabled</param-name>

<param-value>false</param-value>

</context-param>

因爲在這裏我們需要使用Liferay自己的Portlet容器而不是WebSphere Application Server自帶的,如果沒有任何配置的情況下,WebSphere Application Server總是使用自己的Portlet容器。

其餘部分與部署其他應用程序一樣。

注意點

Ø 插件模式開發優點

從目前驗證結果來看,插件模式開發更適用於獨立的web工程,優點非常明顯,只要遵循JSR,就可以任何Web方式開發,如sturts2spring mvc等,對liferay基本上沒有依賴,耦合很低,可以非常方便部署、開發、遷移。

注:插件portlet可通過liferay的接口類(portal-service.jarext-portal-ext-service.jar)來調用相關代碼。

Ø 插件模式開發缺點

在優點明顯的同時,缺點也很明顯。每個portlet都是獨立的war包,代碼之間的共享訪問很難,同時不能直接調用liferay的實現類的jar包(portal-impl.jarext-portal-ext-impl.jar)中的代碼


發佈了15 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章