0

AdminService を注入すると、java.lang.NullPointerException が表示されましたが、この Bean を別のマネージド Bean に同じ方法で注入すると、すべてが機能します。

    @ManagedBean
    @SessionScoped
    public class ScheduleController implements Serializable {

        /**
         * 
         */
        private static final long serialVersionUID = -1489523494215832724L;

        private ScheduleModel eventModel;

        @ManagedProperty(value = "#{adminService}")
        AdminService adminService;

        private ScheduleEvent event = new DefaultScheduleEvent();

        public ScheduleController() {
            List<Service> = adminService.getAllService();

        }

    public AdminService getAdminService() {
        return adminService;
    }


    public void setAdminService(AdminService adminService) {
        this.adminService = adminService;
    }

AdminService の実装:

Service("adminService")
public class AdminServiceImpl implements AdminService,Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Autowired
    AdminDao adminDao ;
    // adminDao injected by spring 

    @Transactional
    public void add(Admin admin) {
        adminDao.save(admin);

    }

    @Transactional
    public void edit(Admin admin) {
        adminDao.update(admin);

    }

    @Transactional
    public void delete(Admin admin) {
        adminDao.delete(admin);

    }

    @Transactional
    public Admin getAdmin(Integer adminId) {
        return adminDao.findById(adminId);
    }

    @Transactional
    public List<Admin> getAllAdmin() {
        return adminDao.findAll();
    }

    /**
     * @return the adminDao
     */
    public AdminDao getAdminDao() {
        return adminDao;
    }

    /**
     * @param adminDao the adminDao to set
     */
    public void setAdminDao(AdminDao adminDao) {
        this.adminDao = adminDao;
    }

    @Override
    public Admin authenticate(String adminName, String adminPass) {

        return this.adminDao.authenticate(adminName, adminPass);
    }



}
4

2 に答える 2

0

Bean の構築に注入された依存関係にアクセスしようとしています。これは明らかにうまくいきません。基本的に、すべてが次のように機能することを期待しています。

ScheduleController scheduleController; // Declare.
scheduleController.adminService = new AdminService(); // Inject.
scheduleController = new ScheduleController(); // Construct.

これは意味がありません。インスタンスが構築される前にインスタンス変数を設定することはできません。代わりに、次のように機能します。

ScheduleController scheduleController; // Declare.
scheduleController = new ScheduleController(); // Construct.
scheduleController.adminService = new AdminService(); // Inject.

構築注入の直後にアクションを実行したい場合は、注釈付きのメソッドを使用する必要があります。@PostConstruct

だから、交換

public ScheduleController() {
    List<Service> services = adminService.getAllService();

}

@PostConstruct
public void init() { // Note: method name is fully free to your choice.
    List<Service> services = adminService.getAllService();

}

<f:event>混乱の必要はありません。また、必ずしも入る必要はありません<f:metadata>

于 2013-07-09T10:59:41.820 に答える