Websphere Portal Server虚拟门户IBM Portal API

时间:2017-09-28 09:49:28

标签: java api websphere-portal

我正在使用IBM Portal API在Websphere Portal Server中开发一些页面,但我想在嵌入我的主门户网站的虚拟门户网站的上下文中工作。我已经阅读了IBM的文档,但我不明白它是如何工作的,所以我决定问你们。你们有没有人这样做过吗? 这就是我试图从我的虚拟门户网站获取ContentNode的方式:

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();
    //}
}

谢谢,

2 个答案:

答案 0 :(得分:1)

因此,寻找唯一名称是一个坏主意,在门户范围之外工作时,您必须寻找页面的目标。来自信息中心的评论 “虚拟门户网站的概念将一些模型范围扩展到用户操作的虚拟门户网站。目前,这种范围界定概念适用于内容模型,导航模型和导航选择模型。这些模型将其资源范围限定为虚拟门户网站。用户操作的门户网站。“  我认为你最好,将这段代码移到portlet的资源请求中,然后通过它进行更新,这样它就是作用域。如果你想继续沿着这条路走下去,那么代码就不会查找uniquename,而是在使用Identification包将objectid的字符串表示转换为实际对象之后的实际对象id,然后在那个上使用定位器

答案 1 :(得分:1)

对于想要做类似事情的每个人来说,解决方案(这对我来说)可能是:

  1. 使用IBM WCM API创建一个实现VirtualPortalScopedAction的类。在此类中,您必须覆盖run方法。该接口的实现使其成为必要。
  2. 在run方法中,您可以完成所有数学运算。在这里,您必须实例化由IBM Portal API和SPI公开的对象(ContentModelController,ContentModelHome,ContentModelControllerHome)。所有这些都是在IBM Websphere Portal中进行操作所必需的。
  3. 在实现VirtualPortalScopedAction的类中,您必须传递HttpServletRequest和HttpServletResponse,因为实例化所有对象都使用请求和响应。为此,很明显,您在该类中声明了两个属性,并使用setter在请求和响应上设置实例。
  4. 大家好:)我希望这会对你有所帮助!

相关问题