Java Websphere Portal Server虚拟门户IBM Portal API
我正在使用ibmportalapi在websphereportal服务器中开发一些页面,但我希望在嵌套在主体门户中的虚拟门户的上下文中工作。我已经阅读了IBM的文档,但我不明白它是如何工作的,所以我决定问你们。你们中有人已经这么做了吗? 以下是我尝试从虚拟门户获取ContentNode的方式: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
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,然后对每个想这样做的人使用该上的定位器,解决方案如下(这是给我的)可能是:
谢谢大家:)我希望这会对你们有所帮助 您使用的是什么特定的门户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。我在帖子里写了一些代码,想了解更多细节。我想我不明白你的意思,但是