2015-10-14 101 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> 
相关问题