0

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

<?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();
        }

    }
}
4

1 回答 1

0

由于您的 person bean 由 Spring 管理,您应该使用@Autowired注解进行依赖注入,或者通过 XML 注入它,就像您为PersonService. 您也可以将 bean 声明为@Componentand @Scope

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

于 2013-04-03T14:49:33.320 回答