Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Websphere Portal Server虚拟门户IBM Portal API_Java_Api_Websphere Portal - Fatal编程技术网

Java Websphere Portal Server虚拟门户IBM Portal API

Java Websphere Portal Server虚拟门户IBM Portal API,java,api,websphere-portal,Java,Api,Websphere Portal,我正在使用ibmportalapi在websphereportal服务器中开发一些页面,但我希望在嵌套在主体门户中的虚拟门户的上下文中工作。我已经阅读了IBM的文档,但我不明白它是如何工作的,所以我决定问你们。你们中有人已经这么做了吗? 以下是我尝试从虚拟门户获取ContentNode的方式: private void createPortalContent(HttpServletRequest request, HttpServletResponse response) throws Inte

我正在使用ibmportalapi在websphereportal服务器中开发一些页面,但我希望在嵌套在主体门户中的虚拟门户的上下文中工作。我已经阅读了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();
    //}
}
private void createPortalContent(HttpServletRequest请求,HttpServletResponse响应)引发InterruptedException,ModelException{
上下文ctx=null;
试一试{
ctx=新的InitialContext();
portletModelHome=(portletModelHome)ctx.lookup(portletModelHome.JNDI_NAME);
if(portletModelHome==null){
睡眠(5000);
portletModelHome=(portletModelHome)ctx.lookup(portletModelHome.JNDI_NAME);
}
contentModelHome=(contentModelHome)ctx.lookup(contentModelHome.JNDI_NAME);
if(contentModelHome==null){
睡眠(5000);
contentModelHome=(contentModelHome)ctx.lookup(contentModelHome.JNDI_NAME);
}
contentModelControllerHome=(contentModelControllerHome)ctx.lookup(contentModelControllerHome.JNDI_NAME);
if(contentModelControllerHome==null){
睡眠(5000);
contentModelControllerHome=(contentModelControllerHome)ctx.lookup(contentModelControllerHome.JNDI_NAME);
}
contentMappingInfoHome=(contentMappingInfoHome)ctx.lookup(contentMappingInfoHome.JNDI_NAME);
if(contentMappingInfoHome==null){
睡眠(5000);
contentMappingInfoHome=(contentMappingInfoHome)ctx.lookup(contentMappingInfoHome.JNDI_NAME);
}
virtualPortalList=(VirtualPortalListHome)ctx.lookup(VirtualPortalListHome.VIRTUAL\u PORTAL\u LIST\u JNDI\u NAME);
}捕获(NamingE例外){
e、 printStackTrace();
}
ContentModelController ContentModelController=getController(请求、响应);
//LOGGER.info(“####内容模型控制器:“+contentModelController.getLocator()+”+contentModelController.getRoot().toString());
ContentNode ContentNode=(ContentNode)contentModelController.getLocator().findByUniqueName(“ro.ram.ComCommunication”);
//info(“####内容节点:“+contentNode”);
//LOGGER.info(“#####虚拟门户列表:“+virtualPortalList”);
//VirtualPortal VirtualPortal=virtualPortalList.getVirtualPortalListProvider().getVirtualPortalList().getLocator().findByUniqueName(“”);
//LOGGER.info(“####虚拟门户:“+virtualPortal.getTitle(Locale.ENGLISH));
//迭代器it=virtualPortalList.getVirtualPortalListProvider().getVirtualPortalList().Iterator();
//while(it.hasNext()){
//LOGGER.info(“####虚拟门户列表迭代器:”+it.next().getDescription(Locale.ENGLISH)++++it.next().getTitle(Locale.ENGLISH));
//it.next();
//}
}

谢谢,

所以寻找唯一的名称是个坏主意,在门户范围之外工作时,必须寻找页面的objectid。此评论来自信息中心 “虚拟门户的概念将某些模型的范围限定为用户操作的虚拟门户。目前,此范围界定概念适用于内容模型、导航模型和导航选择模型。这些模型将其资源的范围限定为用户操作的虚拟门户。”
我认为您最好将此代码移动到portlet的资源请求中,然后通过该请求进行更新,以确定其范围。如果您想继续沿着这条路径前进,那么在使用Identification包将objectid的字符串表示形式转换为实际对象后,让代码不查找uniquename,而是查找实际对象id,然后对每个想这样做的人使用该上的定位器,解决方案如下(这是给我的)可能是:

  • 使用IBM WCM API创建一个实现VirtualPortalScopedAction的类。在此类中,必须重写run方法。此接口的实现使其成为必要
  • 在run方法中,您完成所有的计算。在这里,您必须实例化由IBM Portal API和SPI公开的对象(ContentModelController、ContentModelHome、ContentModelControllerHome)。所有这些都是在IBM Websphere Portal中进行操作所必需的
  • 在实现VirtualPortalScopedAction的类中,必须传递HttpServletRequest和HttpServletResponse,因为实例化所有对象都会使用请求和响应。显然,在该类中声明两个属性,并使用setter设置请求和响应的实例

  • 谢谢大家:)我希望这会对你们有所帮助

    您使用的是什么特定的门户API?我使用的门户API包含名为com.ibm.Portal.*的包。jar是wp.base.jar、wp.model.api.jar等。模型api相当大,但是如果您在portlet的范围内运行代码,那么应该已经确定了它的范围,就像使用模型api检查内容模型一样,它已经确定了当前VP的范围。现在,如果您试图在VP范围之外的servlet中运行它,比如尝试创建链接或类似的内容,那么您必须使用ObjectID等来查找页面,等等。并且只有部分模型是VP范围的,就像portlet模型是跨VP的。我们需要更多关于你想做什么的细节你好!我试图在虚拟门户中创建一些门户页面,但我将应用程序运行到WebSphereApplicationServer上的servlet上下文中。主要是,我无法访问虚拟门户上下文,因为我试图使用该页面的objectId获取门户页面模板,而得到的是NullPointer。我在帖子里写了一些代码,想了解更多细节。我想我不明白你的意思,但是