Нулевой указатель при автоматическом подключении компонента к управляемому компоненту JSF

Я разработал службу электронной почты, используя почту Spring Java и шаблон Velocity, как показано ниже.

Электронная почта.java

@Component
public class Email {    

        private JavaMailSender mailSender;      
        private VelocityEngine velocityEngine;  


         @Autowired
        private ApplReviewService applReviewService;

       @Autowired
        private UserService userService;


        public void setUserService(UserService userService ) {
            this.userService=userService;
        }


        public UserService getuserService() {
            return userService;
        }

        @Autowired
        @Required
        public void setMailSender(JavaMailSender mailSender) {
            this.mailSender = mailSender;
        }

        public VelocityEngine getVelocityEngine() {
            return velocityEngine;
        }

        @Autowired
        @Required
        public void setVelocityEngine(VelocityEngine velocityEngine) {
            this.velocityEngine = velocityEngine;
        }

// Метод для отправки электронной почты. }

Моя весна.xml

<context:component-scan base-package="com.test.common"/>

    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
           </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>


@ManagedBean(name="person")
@SessionScoped
Public class Person{

@Autowired
private Email email ; // getter and setter for this.

}

Я пытаюсь автоматически связать свой класс электронной почты с Jsf manageBean, но получаю исключение нулевого указателя. Где я ошибаюсь.


person mdp    schedule 11.10.2012    source источник


Ответы (1)


Вы не можете внедрить такой компонент Spring в управляемый компонент JSF. Измените его на

@ManagedBean(name="person")
@SessionScoped
Public class Person{

@ManagedProperty(value="#{email}")
private Email email ; // getter and setter for this.

}

Смотрите также:

person Ravi Kadaboina    schedule 11.10.2012
comment
@Ravi..... Я пробовал ответ выше, но он не работает. Я все еще получаю нулевой указатель. Не могли бы вы пояснить мне одну вещь. Я определил bean-компонент электронной почты в Spring.xml, который является main/java/resources Папка /config. Это проблема. Нужно ли мне специально определять ее в ApplicationContext.xml, которая является папкой WEB-INF? - person mdp; 12.10.2012
comment
Неважно, куда вы поместите свои xml-файлы, если вы укажете в своем contextConfigLocation ваш web.xml, хотя местоположение по умолчанию — /WEB-INF/applicationContext.xml. См. также http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/context/ContextLoader.html. Как вы указали в своем web.xml? Вы также добавили org.springframework.web.jsf.el.SpringBeanFacesELResolver в свой Faces-config.xml - person Ravi Kadaboina; 12.10.2012
comment
Эй, спасибо, Рави...... Ваше предложение дало четкое представление о загрузке спринг-бинов в приложение. Теперь я могу заставить свое приложение работать и получил четкое представление о загрузке спринг-бинов. - person mdp; 12.10.2012
comment
Еще один вопрос. После запуска моего приложения ApplicationContext шесть раз загружается в мое приложение. Как это остановить? - person mdp; 12.10.2012
comment
Вы видели это в выводе консоли? - person Ravi Kadaboina; 12.10.2012
comment
да. Я регистрирую все это. Я вижу, что он загружается 6 раз. как этого избежать, чтобы я мог загружаться только вовремя - person mdp; 12.10.2012
comment
Можно ли внедрить службы с @service с помощью ManagedPropety в ManagedBean? - person mdp; 12.10.2012
comment
Да, вы должны уметь и это. - person Ravi Kadaboina; 12.10.2012