2017-09-28 48 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并没有为我提供这样的东西。谢谢! –