2013-04-21 102 views
1

我需要幫助,它確實令人困惑。 我試着按照web上關於IPC的所有示例 - 使用事件的portlet之間傳遞參數。如何在Portlet之間傳遞對象(IPC)Liferay portlet

這裏是我的代碼,如果我只是想利用事件來傳遞我的attribute

QName qName = new QName("http://liferay.com/events", "ipc.send"); 
response.setEvent(qName, pitchType); 

,然後在我的吸氣事件的Portlet我的代碼

@ProcessEvent(qname = "{http://liferay.com/events}ipc.send") 
public void catchBall(EventRequest request, EventResponse response) { 
    Event event = request.getEvent(); 
    String send = (String) event.getValue(); 
    response.setRenderParameter("send", send); 
} 

只通過與只有字符串一個參數。 我試過給這個參數傳遞像Foo這樣的對象,但沒有運氣。它不會運行。 任何想法如何通過事件傳遞對象?

取悅真的需要幫助這裏.. :(

回答

2

傳遞自定義對象作爲事件參數可能會非常棘手,尤其是當你去跨越邊界的插件:類必須提供給在這種情況下,兩個插件,否則事件

一個常見的建議是保持UI層的溝通(例如,在portlet事件中)很淺並且不依賴於重物,請記住,這種溝通不應該是商業模式,層,因此可以傳遞標識符,主鍵或其他佔位符來表示真實數據。假設沒有人可能有興趣接收事件,那麼你應該首先,我們沒有太多的努力來構建這個活動。

或者你可以緩存所述感興趣的對象業務層上,因此,如果它確實正在對工作也將很快提供(例如,如果接收到事件)

+0

您好我管理使用會話來傳遞對象request.getPortletSession()。setAttribute(「foo1」,foo); 可以嗎?使用像這樣的portlet會話? – dmh 2013-04-22 04:01:03

+0

這是最明顯的數據共享,但從架構的角度來看,它只是實現一個全局變量而不是顯式通信通道 - 因此,爲了乾淨的架構,我會提出反對這種技術。 – 2013-04-22 07:21:10

+0

嗯,我看到好了,然後......謝謝你的回答:) – dmh 2013-04-22 09:07:51