我正在使用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();
//}
}
谢谢,
最佳答案
因此,查找唯一名称是一个坏主意,在门户网站范围之外工作时,必须查找页面的objectid。信息中心的评论
“虚拟门户网站的概念将某些模型范围限定于用户在其中进行操作的虚拟门户网站。目前,此范围界定概念适用于内容模型,导航模型和导航选择模型。这些模型将其资源范围限定于虚拟门户网站用户操作的门户。”
我认为最好是将这段代码移到portlet的资源请求中,然后通过它进行更新,这样就可以了。如果要继续沿此路径进行操作,请执行以下步骤,以便在使用“标识”包将对象ID的字符串表示形式转换为实际对象之后,代码不查找唯一名称,而是查找实际对象ID,然后在该位置使用定位器
关于java - Websphere Portal Server虚拟门户IBM Portal API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46466071/