2

使用: liferay 6.1 spring 3.1 spring-portlet-mvc

@Autowired で Spring Bean を注入しようとしましたが、これは liferay 6.1 では機能しないようです。既知のバグ?回避策

ここに私のapplicationContext.xml:

  <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:util="http://www.springframework.org/schema/util"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xsi:schemaLocation="
   http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd
   http://www.springframework.org/schema/tx 
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/util 
   http://www.springframework.org/schema/util/spring-util-3.0.xsd
   http://www.springframework.org/schema/mvc 
   http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<bean id="viewNameTranslator"
      class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"/>

<bean   
class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

<mvc:annotation-driven />
<context:annotation-config />
<context:component-scan base-package="com.ebcont.yatc.portlets.service"/>

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:configuration.properties</value>
            <value>classpath:mail.properties</value>
        </list>
    </property>
</bean>

<bean id="appProperties"
      class="org.springframework.beans.factory.config.PropertiesFactoryBean">

    <property name="singleton" value="true"/>

    <property name="properties">
        <props>
            <prop key="application.name">${application.name}</prop>
        </props>
    </property>

</bean>

<bean id="mailProperties"
      class="org.springframework.beans.factory.config.PropertiesFactoryBean">

    <property name="singleton" value="true"/>

    <property name="properties">
        <props>
            <prop key="mail.host">${mail.host}</prop>
            <prop key="mail.port">${mail.port}</prop>
            <prop key="mail.username">${mail.username}</prop>
            <prop key="mail.password">${mail.password}</prop>
            <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
            <prop key="mail.smtp.starttls.enable">${mail.smtp.starttls.enable}</prop>
            <prop key="mail.registration.sender">${mail.registration.sender}</prop>
            <prop key="mail.registration.subject">${mail.registration.subject}</prop>
        </props>
    </property>

</bean>

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="${mail.host}"/>
    <property name="port" value="${mail.port}"/>
    <property name="username" value="${mail.username}"/>
    <property name="password" value="${mail.password}"/>
    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
            <prop key="mail.smtp.starttls.enable">${mail.smtp.starttls.enable}</prop>
        </props>
    </property>
    <property name="defaultEncoding" value="UTF-8"/>
</bean>

<bean id="velocityEngine"
      class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
    <property name="velocityProperties">
        <value>
            resource.loader=class
               class.resource.loader.class=
   org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
        </value>
    </property>
</bean>

<bean id="portletMultipartResolver"
      class="org.springframework.web.portlet.multipart.CommonsPortletMultipartResolver">
    <!-- one of the properties available; the maximum file size in bytes -->
    <property name="maxUploadSize" value="100000"/>
</bean>
</beans>

web.xml:

<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Portlet MVC</display-name>

<servlet>
    <servlet-name>ViewRendererServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.ViewRendererServlet</servlet-class>
</servlet>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

<servlet-mapping>
    <servlet-name>ViewRendererServlet</servlet-name>
    <url-pattern>/WEB-INF/servlet/view</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:/**/applicationContext.xml</param-value>
</context-param>

4

1 に答える 1

6

問題はweb.xmlファイルに関連しています。あなたがする必要があるのは、次のリスナーを追加することです:

<listener-class>com.liferay.portal.kernel.servlet.SecurePluginContextListener</listener-class>

Liferay 6.1およびカスタムのspring-mvcポートレットデプロイメント(LPS-29103)にはバグがあることに注意してください。この問題は、Liferayの自動デプロイプロセスを使用している場合に発生します。修正はすでにリリースされています。この問題は、自動展開プロセスがweb.xmlファイルを修正し、リスナーを誤った順序で固定するために発生します。

あなたがする必要があるのは、SpringSecurePluginContextListenerコンテキストリスナーの後にリスナー()を追加することです。したがって、あなたの場合は次のようになります。

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
    <listener-class>com.liferay.portal.kernel.servlet.SecurePluginContextListener</listener-class>
</listener>
<listener>
    <listener-class>com.liferay.portal.kernel.servlet.PortletContextListener</listener-class>
</listener>

これで問題が解決することを願っています。

于 2012-12-06T09:41:00.063 に答える