在乙個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...