Jetspeed null PortletDefinition

时间:2010-03-15 09:28:41

标签: portlet portal derby

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

  

无法传递null PortletDefinition   到PortletEntity

知道造成这个问题的原因是什么吗?我调查了一下,似乎jetspeed在添加新的portlet时运行一个进程,它在DB中创建映射(在我的情况下是derby)。如果这没有完成,它似乎导致了这个问题。我的假设是否正确?如果是,我该如何重新启动此流程?

非常感谢

1 个答案:

答案 0 :(得分:1)

此异常可能是由于页面上的portlet名称不匹配所致。当使用一个名称部署portlet应用程序时,通常会发生这种情况,但页面片段会引用另一个名称,例如,在您的页面上:

<fragment id="1234" type="portlet" name="myApp::myPortlet">

当您部署war文件时,它的名称为myApp-1.0-SNAPSHOT.war

片段的name属性应该具有值“$ {portlet.war.name} :: $ {portlet.name}。”第一部分($ {portlet.war.name})是portlet war文件的名称减去.war。第二部分来自portlet.xml文件中标记的值。

您可以重命名war文件,也可以更改页面定义以包含版本。我不建议将版本号放在片段中,因为它可以改变。

第三种解决方案是通过在Jetspeed Container servlet上设置名为contextName的init参数来实际更改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>