2010-03-15 16 views
0

我運行包含各種portlet應用程序和最近的重新安裝,其中一些門戶小程序將返回後所遇到的一個問題,一個jetspeed的門戶Jetspeed的空PortletDefinition

不能空PortletDefinition 傳遞給PortletEntity

任何想法是什麼導致這個問題?我調查了一下,似乎jetspeed運行一個進程,當新的portlet被添加到它在數據庫中創建映射的地方時(在我的情況下是derby)。如果這沒有完成似乎會導致這個問題。我的假設是否正確?如果是,我該如何重新啓動這個過程?

非常感謝

回答

1

此異常可以在自己的頁面上有一個不匹配的組件名稱引起的。當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文件或cha更改頁面定義以包含版本。我不建議將版本號放在片段中,因爲它可以改變。

第三種解決方案是通過在Jetspeed容器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>