2015-10-14 74 views
0

在MVC春天的Liferay 6.2門戶工作時servlet上下文My_portlet設置。 我已經構建了一個服務xml文件並構建了該項目。它管理一個實體(比方說MyEntity)。 當我打電話給我addMyEntity(長ID)方法從我的控制器,則拋出異常說: 15:53:04135 ERROR [HTTP-BIO-8080-EXEC-60] [PortletBeanLocatorUtil:42] BeanLocator爲空爲servlet上下文My_portlet com.liferay.portal.kernel.bean.BeanLocatorException:BeanLocator尚未設置爲servlet上下文My_portletBeanLocator尚未使用服務構建器(Liferay的)

它看起來門戶網站無法訪問某些bean資源。 我的web.xml文件包括以下內容:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring-context/portlet-application-context.xml</param-value> 
</context-param> 
<servlet> 
    <servlet-name>ViewRendererServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.ViewRendererServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ViewRendererServlet</servlet-name> 
    <url-pattern>/WEB-INF/servlet/view</url-pattern> 
</servlet-mapping> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

portlet的應用程序的context.xml僅包括這些bean:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="contentType" value="text/html;charset=UTF-8" /> 
     <property name="prefix" value="/WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
    </bean> 

我覺得服務器所尋找的是這些豆子,存儲有在portlet的spring.xml文件:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" default-destroy-method="destroy" default-init-method="afterPropertiesSet" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
    <bean id="com.company.project.servicebuilder.dao.service.MyEntityLocalService" class="com.company.project.servicebuilder.dao.service.impl.MyEntityLocalServiceImpl" /> 
    <bean id="com.company.project.servicebuilder.dao.service.MyEntityService" class="com.company.project.servicebuilder.dao.service.impl.MyEntityServiceImpl" /> 
    <bean id="com.company.project.servicebuilder.dao.service.persistence.MyEntityPersistence" class="com.company.project.servicebuilder.dao.service.persistence.MyEntityPersistenceImpl" parent="basePersistence" /> 
</beans> 

不過,我看不出有任何引用portlet的spring.xml在其他文件中,所以我怕說了這些豆從未宣佈過W¯¯當該portlet被部署時。 它應該在什麼地方引用?

除了我的假設,還有其他建議嗎?

thx提前。

回答

0

嘗試刪除組件,然後再次進行部署,這正常的問題都在部署錯誤。

+0

沒有這個運氣,並重新啓動服務器也沒有使它。 –

+0

我真的可以看到portlet-spring.xml引用到service.properties中: ... spring.configs = \ ... WEB-INF/classes/META-INF/portlet-spring.xml,\。 .. 難道這就是工作的考慮,我的portlet的spring.xml路徑是 <項目名稱> /源/主/資源// META-INF/portlet的春天。xml 我沒有任何WEB-INF/classes目錄。 –

0

在日誌文件中的信息可能會有點誤導。如果使用ServiceBuilder和Liferay portlet插件項目名稱與配置的上下文根不匹配,則會出現此消息時的一種可能情況。如果您追蹤ServiceBuilder模板邏輯以生成ClpSerializer.java類和運行時執行堆棧,則可以進行連接。這是我在LR6.2 CE中的經驗。 嘗試匹配您的上下文根(在Eclipse中 - 右鍵單擊​​項目名稱/屬性/ Web項目設置),並使其與Liferay portlet項目名稱相同 - 例如, 「測試門戶」。 使用您最喜愛的構建工具重新構建您的服務,並在您的服務器上部署項目。 發佈您的成功程度。這是我解決上述問題的方法,因爲我正在導入現有項目並且不注意項目設置。 匹配這兩個值後,我能夠成功部署並執行portlet邏輯。

乾杯!

0

由於用戶「所以TE」和一些廣泛的研究我解決這個問題,在配置標記在pom.xml中指定pluginName並再次運行服務建設者。

<configuration> 
    <autoDeployDir>${liferay.auto.deploy.dir}</autoDeployDir> 
    <appServerDeployDir>${liferay.app.server.deploy.dir}</appServerDeployDir> 
    <appServerLibGlobalDir>${liferay.app.server.lib.global.dir}</appServerLibGlobalDir> 
    <appServerPortalDir>${liferay.app.server.portal.dir}</appServerPortalDir> 
    <liferayVersion>${liferay.version}</liferayVersion> 
    <pluginType>portlet</pluginType> 
    <pluginName>${project.artifactId}-${project.version}</pluginName> 
</configuration> 
相關問題