【发布时间】:2017-09-28 09:49:27
【问题描述】:
我正在使用 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();
//}
}
谢谢,
【问题讨论】:
-
您使用的是什么特定的 Portal API?
-
我正在使用包含名为 com.ibm.portal.* 的包的门户 API。 jar 是 wp.base.jar、wp.model.api.jar 等。
-
模型 api 非常大,但是如果您在 portlet 的范围内运行代码,它应该已经是范围内的,就像您使用模型 api 来检查内容模型一样已经限定在当前 VP 范围内。现在,如果您尝试在 VP 范围之外的 servlet 中运行它,例如尝试创建链接或类似的东西,您必须使用 objectids 等来查找页面等等。并且只有模型的一部分是 VP 范围的,就像 portlet 模型是跨 vps 一样。我们需要更多关于您想要做什么的详细信息
-
您好!我正在尝试在虚拟门户中创建一些门户页面,但我正在将应用程序运行到 Websphere Application Server 上的 servlet 上下文中。主要是,我无法访问虚拟门户上下文,因为我正在尝试使用该页面的 objectId 获取门户页面模板并且我正在获取 NullPointer。我在帖子中放了一些代码以获取更多详细信息。
标签: java api websphere-portal