【问题标题】:spring 2.5.6 DI issue in jsf applicationjsf应用程序中的spring 2.5.6 DI问题
【发布时间】:2013-03-24 23:07:24
【问题描述】:

每次尝试将数据插入数据库时​​,我都会得到 NPE(空指针异常)。帮我解决这个问题。我已经导入了 spring 所需的所有必要库。 这是我配置所有 bean 的 applicationContext.xml 文件。

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

<bean id="personService" class="com.ecommerce.assignment.service.PersonService">
    <property name="personDAO" ref="personDAO" />
</bean>
<bean id="personBean" class="com.ecommerce.assignment.bean.PersonBean" />
<bean id="personDAO" class="com.ecommerce.assignment.dao.PersonDAO" />
</beans>

这是person DAO的界面。

public interface IPersonDAO {
    public void addPerson(Person instance);
}

此 personDAO 类实现了 IpersonDAO 接口及其未实现的方法。

public class PersonDAO implements IPersonDAO {

        @Override
        public void addPerson(Person instance) {
            Session session = HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction().begin();

            session.saveOrUpdate(instance);

            session.getTransaction().commit();
            session.close();
        }
    }

这是接口personService。 公共接口 IPersonService { public void addPerson(Person instance); }

   public class PersonService implements IPersonService,Serializable {
        private IPersonDAO personDAO;

        public IPersonDAO getPersonDAO() {
            return personDAO;
        }

        public void setPersonDAO(IPersonDAO personDAO) {
            this.personDAO = personDAO;
        }

        @Override
        public void addPerson(Person instance) {
            getPersonDAO().addPerson(instance);
        }
}

public class PersonBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private String emailAddress;
    private String password;
    private String username;
    @ManagedProperty(value = "#{personService}")
    private IPersonService iPersonService;

public void addPerson(){
        try{
            Person person = new Person();
            person.setUsername(getUsername());
            person.setEmailAddress(getEmailAddress());
            person.setPassword(getPassword());
            iPersonService.addPerson(person);
        }
        catch(Exception ex){
            ex.printStackTrace();
        }

    }
}

【问题讨论】:

  • 你忘了告诉null到底是什么变量。请相应地更新问题。或者您的具体问题是您不了解NullPointerException 的含义?
  • @BalusC,提供 NPE 的是 iPersonService。

标签: spring jsf-2 dependency-injection


【解决方案1】:

由于你的 person bean 是由 Spring 管理的,你应该使用 @Autowired 注解来进行依赖注入,或者像 PersonService 那样通过 XML 注入它。您也可以将 bean 声明为 @Component@Scope

您的错误在于使用 JSF 的 @ManagedProperty 注释在 bean 中注入服务,该注释仅在 JSF 上下文中工作,即使用 JSF 托管 bean、使用 @ManagedBean 注释或通过 XML 声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2021-01-07
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多