2017-09-28 88 views
1

我正在使用IBM Portal API開發Websphere Portal Server中的某些頁面,但我想在嵌套在主要門戶中的虛擬門戶網站的上下文中工作。我已經閱讀了IBM的文檔,但我不明白它是如何工作的,所以我決定問你們。你們中有人是否已經這樣做了? 這是我怎樣,我想從我的虛擬門戶獲得ContentNode:Websphere Portal Server虛擬門戶IBM門戶API

private void createPortalContent(HttpServletRequest request, HttpServletResponse response) throws InterruptedException, ModelException{ 
    Context ctx = null; 
    try { 
     ctx = new InitialContext(); 

     portletModelHome = (PortletModelHome) ctx.lookup(PortletModelHome.JNDI_NAME); 
     if(portletModelHome == null){ 
      Thread.sleep(5000); 
      portletModelHome = (PortletModelHome) ctx.lookup(PortletModelHome.JNDI_NAME); 
     } 

     contentModelHome = (ContentModelHome) ctx.lookup(ContentModelHome.JNDI_NAME); 
     if(contentModelHome == null){ 
      Thread.sleep(5000); 
      contentModelHome = (ContentModelHome) ctx.lookup(ContentModelHome.JNDI_NAME); 
     } 

     contentModelControllerHome = (ContentModelControllerHome) ctx.lookup(ContentModelControllerHome.JNDI_NAME); 
     if(contentModelControllerHome == null){ 
      Thread.sleep(5000); 
      contentModelControllerHome = (ContentModelControllerHome) ctx.lookup(ContentModelControllerHome.JNDI_NAME); 
     } 

     contentMappingInfoHome = (ContentMappingInfoHome) ctx.lookup(ContentMappingInfoHome.JNDI_NAME); 
     if(contentMappingInfoHome == null){ 
      Thread.sleep(5000); 
      contentMappingInfoHome = (ContentMappingInfoHome) ctx.lookup(ContentMappingInfoHome.JNDI_NAME); 
     } 

     virtualPortalList = (VirtualPortalListHome) ctx.lookup(VirtualPortalListHome.VIRTUAL_PORTAL_LIST_JNDI_NAME); 
    } catch (NamingException e) { 
     e.printStackTrace(); 
    } 

    ContentModelController contentModelController = getController(request, response); 
    //LOGGER.info("### CONTENT MODEL CONTROLLER: " + contentModelController.getLocator() + " " + contentModelController.getRoot().toString()); 
    ContentNode contentNode = (ContentNode) contentModelController.getLocator().findByUniqueName("ro.ram.comunicate"); 
    //LOGGER.info("### CONTENT NODE: " + contentNode); 
    // LOGGER.info("#### VIRTUAL PORTAL LIST: " + virtualPortalList); 

    //VirtualPortal virtualPortal = virtualPortalList.getVirtualPortalListProvider().getVirtualPortalList().getLocator().findByUniqueName(""); 
    // LOGGER.info("### VIRTUAL PORTAL: " + virtualPortal.getTitle(Locale.ENGLISH)); 
    //Iterator<VirtualPortal> it=virtualPortalList.getVirtualPortalListProvider().getVirtualPortalList().iterator(); 
    // while(it.hasNext()){ 
    //  LOGGER.info("### VIRTUAL PORTAL LIST ITERATOR: " + it.next().getDescription(Locale.ENGLISH) + " " + " " + it.next().getTitle(Locale.ENGLISH)); 
    //  it.next(); 
    //} 
} 

謝謝

+0

您使用了哪些特定的Portal API? – Carlos

+0

我正在使用包含名爲com.ibm.portal。*的軟件包的門戶API。這些jar包是wp.base.jar,wp.model.api.jar等。 –

+1

模型api非常大,但是如果你正在portlet範圍內運行代碼,它應該已經被作用域了,就像你正在使用模型api來檢查內容模型,它已經將範圍擴展到當前的VP。現在,如果您試圖在VP範圍之外的servlet中運行它,比如嘗試創建鏈接或類似的東西,那麼您必須使用objectids等來查找頁面,而不是查找頁面。 只有模型的一部分是VP作用域,就像portlet模型跨越vps一樣。我們需要更多關於你想要做什麼的細節 – Crosstalk22

回答

1

對於大家誰願意做這樣的事情,該解決方案(這對我來說)可能是:

  1. 使用IBM WCM API創建一個實現VirtualPortalScopedAction類。在這個類中你必須重寫run方法。這個接口的實現使得它有必要。
  2. 在運行方法中,你完成所有的數學運算。在這裏,您必須實例化由IBM Portal API和SPI公開的對象(ContentModelController,ContentModelHome,ContentModelControllerHome)。所有這些都是在IBM Websphere Portal中進行操作所必需的。
  3. 在實現VirtualPortalScopedAction的類中,您必須傳遞HttpServletRequest和HttpServletResponse,因爲實例化所有對象都使用請求和響應。爲此,很顯然你在這個類中聲明瞭兩個屬性,並使用setter來設置請求和響應的實例。

thx你們:)我希望這會幫助你!

+0

這節省了我的一天。有很多論壇條目說明它根本不起作用,但是這個解決方案完美地工作 – fishbone

+0

我知道,當我第一次遇到這個問題時,我已經失去了大約1周,直到這個想法拯救了我:) –

1

所以,尋找獨特的名字是一個壞主意,你必須尋找頁面的OBJECTID在門戶範圍之外工作時。 「來自信息中心的評論 」虛擬門戶的概念將一些模型的範圍擴展到用戶操作的虛擬門戶,目前這個範圍概念適用於內容模型,導航模型和導航選擇模型,這些模型將其資源範圍擴展到用戶操作的虛擬門戶網站。「 我認爲你會最好的,將這些代碼移動到一個portlet的資源請求中,然後通過它進行更新,因此它是有作用域的。如果你想繼續這個路徑,那麼使代碼不會查找uniquename,而是在使用Identification包將objectid的字符串表示轉換爲實際對象之後,代替實際對象id,然後使用該定位器

+0

我想我不理解你,但是再一次,我的問題是我可以在虛擬門戶的上下文中運行應用程序/ servlet。我看不到放置在虛擬門戶中的對象,而只看到來自主門戶的對象。更確切地說,我已經使用IBM WCM API在WCM for Virtual Portal中創建內容項,但是我通過實現VirtualPortalScopedAction並重寫了run方法來使用該門戶的上下文。現在,IBM API和IBM SPI並沒有爲我提供這樣的東西。謝謝! –