liferay學習系列(3)

2021-08-30 06:00:08 字數 1795 閱讀 9416

在乙個portlet中鏈結到另乙個portlet

在portal中,一般我們都會把左右做成不同的portlet。而portal似乎沒有提供直接的方法,能夠鏈結到其他portlet,通常都是在當前portlet進行顯示。

6.1 portal的url格式分析

在乙個portal頁面中,url的格式如何,它是如何將引數傳給某乙個portlet的。了解了這些,對解決這個問題應該有所幫助。

這是乙個bbs的url的例子。

從這個url分析來看,主要有以下幾個引數

p_p_id=19 這個主要是描述當前是在操作哪個portlet

_19_struts_action=%2fmessage_boards%2fview

_19_categoryid=1 這兩個是需要傳遞給portlet的引數。

如果我們能修改這幾個引數,比如,將19換成其他portlet,應該就可以實現鏈結到另乙個portlet。

一種做法,是將renderresponse. createrenderurl().tostring()進行替換,將其中的portletname換成目標portlet的portletname。方法應該是可行的,但有點麻煩。嘗試找找有沒有更好的方法。

6.2 源**分析

還是從源**入手,看看liferay自己是如何處理的。

renderresponse的實現類是com.liferay.portlet.renderresponseimpl。

public portleturl createrenderurl()

public portleturl createrenderurl(string portletname)

有希望,我們直接呼叫createrenderurl(string portletname),將portlet的名字作為引數傳入,應該就可以實現這個目的了。

但是renderresponse介面並沒有createrenderurl(string portletname)這個方法,只能做一下強制轉換

portleturl rowurl =((com.liferay.portlet.renderresponseimpl)renderresponse).

createrenderurl(portletname);

rowurl.setparameter("categoryid", string.valueof(19));

編寫了一點測試**,對此進行了測試。呵呵,搞定。

6.3 幾個實現細節

portlet有兩種型別,是否可例項化。前述的例子,是不可例項化的portlet,因此只需要使用其portlet名字19即可。那對於可以例項化的portlet呢?經過測試發現,需要把其實例化後的名字作為引數傳入。

比如乙個可例項化的portlet的名字是56_instance_95uy。表示其portlet的名字為56,例項化之後的名字是56_instance_95uy。把這個名字作為引數傳入,即可達到目的。

另乙個問題,我們如何將portletname傳遞給portlet,讓它根據這個引數生成url?一種做法就是編寫portlet的portletpreference,在裡面儲存這個引數名。這樣,在不同的頁面,我們都可以很方便的實現我們需要的功能。

Liferay6學習 liferay6中的UUID

liferay6中的資料庫表中好多都有 uuid 這個字段,i am very new to liferay.我沒學習過liferay5.x版本,之前有幸接觸過4.x版本。在liferay4.x版本中 資料庫中沒有uuid 這個字段。uuid在5.x版本中就已經有了,因為我沒學習過5.x,直接學習6...

liferay5 0 學習筆記2

學習liferay是個痛苦的過程,整天都在那麼多包和類中徘徊.乙個功能涉及的檔案比較多.這段時間本想照著上次哪個貼裡面的做乙個運算元據庫的例子,發現很多不會,包括關於spring,hibernate有很多配置都看 不懂,只能一步步來,首先先從struts開始配置,至於資料,只能是自己add進去 1....

liferay學習筆記三 tagLig渲染

這裡以input field為例。其他的應該也差不多,沒去細了解。liferay裡提供了liferay ui 的taglib,要在jsp頁面裡使用的話,就在前面加上 taglib uri prefix liferay ui 不過大部分時候可以加上 include file html common i...