我正在运行一个包含各种 portlet 应用程序的 jetspeed 门户,并且在最近重新安装后遇到了一个问题,其中一些 portlet 将返回
无法将空 PortletDefinition 传递给 PortletEntity
知道是什么导致了这个问题吗?我进行了一些调查,似乎jetspeed在添加新的portlet时运行一个进程,它在其数据库中创建映射(在我的例子中为derby)。如果这没有完成,它似乎会导致此问题。我的假设正确吗?如果是,我该如何重新启动此过程?
非常感谢
此异常可能是由于页面上的 portlet 名称不匹配造成的。这通常发生在使用一个名称部署 portlet 应用程序但页面片段引用另一个名称时,例如,在您的页面上:
<fragment id="1234" type="portlet" name="myApp::myPortlet">
当你部署你的war文件时,它被命名为例如myApp-1.0-SNAPSHOT.war
片段的名称属性应该具有值“${portlet.war.name}::${portlet.name}。第一部分 (${portlet.war.name}) 是 portlet war 文件的名称,减去.war. 第二部分来自portlet.xml 文件中标签的值。
您可以重命名您的战争文件,或更改您的页面定义以包含版本。我不建议将版本号放在片段中,因为它可以更改。
第三种解决方案是通过在 Jetspeed Container servlet 上设置一个名为 contextName 的初始化参数来实际更改 web.xml 中的 portlet 应用程序的名称。在下面的示例中,它设置为“myApp”:
<servlet>
<description>MVC Servlet for Jetspeed Portlet Applications</description>
<display-name>Jetspeed Container</display-name>
<servlet-name>JetspeedContainer</servlet-name>
<servlet-class>
org.apache.jetspeed.container.JetspeedContainerServlet</servlet-class>
<init-param>
<param-name>contextName</param-name>
<param-value>myApp</param-value>
</init-param>
<load-on-startup>100</load-on-startup>
</servlet>