2012-02-08 35 views
5

假設門戶X Liferay的警告用戶將被部署到Liferay的並具有映射一個友好的URL。假設一個用戶通過映射URL進入Liferay門戶,但portlet中不存在在門戶網站 - 它的部署,但不會添加到頁面。時的portlet不存在

我的問題是,當用戶使用映射的URL沒有任何反應 - 門戶網站沒有提供視覺反饋,目標 portlet不存在。

我該如何改變這種情況?我需要某種形式的警告/通知用戶...

- 編輯 -

我不需要使用第二個portlet來檢查另一個portlet的存在。

最親切的問候,

回答

4

據我所知,沒有做到這一點沒有博物方式。一個portlet 不必始終安裝在頁面上。所以,這種行爲是很正常的。

一個相當哈克解決方案,我能想到的:在JSP中ThemeDisplay對象使用<liferay-theme:defineObjects />這將暴露隱含對象themeDisplay在JSP範圍

  1. 弄個。使用類型設置字符串

  2. 弄個:

    String typeSettings = themeDisplay.getLayout().getTypeSettings(); 
    
  3. 類型設置將有值,如下面:

    layout-template-id=foobar_2column 
    sitemap-include=1 
    column-1=foo_WAR_barportlet,abc_WAR_barportlet,56_INSTANCE_K4Vv, 
    column-2=baz_WAR_xyzportlet, 
    sitemap-changefreq=daily 
    
  4. 所以,如果你有ID非instanceable門戶foo內WAR文件 bar,在佈局上portlet的唯一的ID將 foo_WAR_barportlet

  5. 一旦你知道你期望出現的portlet ID, 它只是一個字符串包含檢查的問題。

    <% if(!typeSettings.contains("foo_WAR_barportlet")) { %> 
        <h3 style="color: red">Alert! Portlet foo_WAR_barportlet not installed.</h3> 
    <% } %> 
    

你可以做上面的步驟,甚至內部的主題,但你必須這樣做,在速度而不是Java即可。希望有所幫助。

編輯

您可以添加內這一行你portal_normal.vm

#if(!$layout.getTypeSettings().contains("foo_WAR_barportlet")) 
    <h3 style="color: red">Alert! Portlet foo_WAR_barportlet not installed.</h3> 
#end 
+0

我在哪裏添加此代碼? – Queequeg 2012-02-08 10:48:00

+0

您可以將其添加到主題中,但隨着主題用Velocity編寫,您必須稍微修改它。 – adarshr 2012-02-08 12:51:53

+0

@Queequeg看到我的更新 – adarshr 2012-02-08 12:54:56

1

是的,你可以做到這一點通過Portlet間的通信,通知用戶的門戶是否被添加到頁面或不是。您需要創建另一個默認位於頁面上的portlet(讓我們稱之爲ListenerPortlet)。

您可以將Listener portlet添加到主題中,以便默認將其添加到每個頁面。

現在,當您將portlet添加到頁面時,您的portlet應該觸發客戶端JavaScript事件並通知您的偵聽器portlet將您的portlet添加到您的頁面。

從您的portlet電話,

Liferay.trigger(eventName, data) 

和監聽器的portlet綁定到事件

Liferay.bind(eventName, function, [scope]) //make the scope as page 

這樣,你的監聽器portlet將知道如果Portlet添加到頁面或不是。如果未添加Portlet,則可以向用戶顯示消息。

更多參考檢查IPC

更具體client-side Inter portlet communicaton

+0

謝謝你的回覆。問題是我不想要另一個portlet - 它可以像第一個portlet一樣簡單地關閉。我需要一個通用的警報,而不是Liferay Portal而不是一個單獨的Portlet。 – Queequeg 2012-02-08 10:44:20

+0

Liferay沒有提供這樣的直接方法,它會告訴portlet是否被添加到頁面中。 – 2012-02-08 11:42:29

0

這將是更好,如果我們試試這個,

ThemeDisplay themeDisplay = request.getAttribute(WebKeys.THEME_DISPLAY); 

Layout layout = LayoutLocalServiceUtil.getLayout(themeDisplay.getLayout().getPlid()); 
LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet)layout.getLayoutType(); 

List allPortletIds = layoutTypePortlet.getPortletIds(); 

如果列表爲空,那麼頁面犯規包含任何的portlet 。

獲取LayoutTypePortlet可確保用戶已重定向到的頁面是佈局類型portlet。

+0

我在哪裏添加此代碼? – Queequeg 2012-02-08 10:46:32

+0

@sharanbm,這是一個好主意,但這些代碼仍然會進入一個portlet,它需要添加到頁面中。 – 2012-02-08 11:48:18

+0

@Queequeg您需要創建一個MVCPortlet並將其放入該代碼中,並且該Portlet應添加到頁面中。 – 2012-02-08 11:49:13

相關問題