0

我正在运行一个包含各种 portlet 应用程序的 jetspeed 门户,并且在最近重新安装后遇到了一个问题,其中一些 portlet 将返回

无法将空 PortletDefinition 传递给 PortletEntity

知道是什么导致了这个问题吗?我进行了一些调查,似乎jetspeed在添加新的portlet时运行一个进程,它在其数据库中创建映射(在我的例子中为derby)。如果这没有完成,它似乎会导致此问题。我的假设正确吗?如果是,我该如何重新启动此过程?

非常感谢

4

1 回答 1

1

此异常可能是由于页面上的 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>
于 2010-03-16T02:00:05.463 回答