wicket用户验证器无法注入Dao Bean - nullpointer异常

时间:2013-07-27 08:36:40

标签: nullpointerexception wicket javabeans validation inject

我创建了JPA实体USER。然后UserDao作为接口,UserDaoBean作为实现。

@Stateless
public class UserDaoBean implements UserDao {
@PersistenceContext
private EntityManager em;
private CriteriaBuilder qb;

@Override
public User getUserByUsername(String username) {
    qb = em.getCriteriaBuilder();
    CriteriaQuery<User> c = qb.createQuery(User.class);
    Root<User> u = c.from(User.class);
    Predicate condition = qb.equal(u.get("username"), username);
    Logger.getLogger(UserDaoBean.class.getName()).log(Level.SEVERE, u.get("username").toString());
    c.where(condition);
    TypedQuery<User> q = em.createQuery(c);
    List<User> results = q.getResultList();
    if (results != null && !results.isEmpty()) {
        return results.get(0);
    }
    return null;
}

当我创造例如。 HomePage.java,对应HomePage.html与表单,我可以使用

    @Inject
private UserDao userdao;

一切正常。 但我创建了UsernameValidator:

public class UsernameValidator implements IValidator<String>{

    @Inject
    private UserDao userDao;   

    @Override
    public void validate(IValidatable<String> iv) {
        String username = iv.getValue(); 
            User user = userDao.getUserByUsername(username);
...
        }       

}

userDao上有NullPointerException。我不明白,为什么注入在页面中起作用,但在Validator中不起作用。

1 个答案:

答案 0 :(得分:1)

您的UserNameValidator类是一个非托管类,而不是Wicket自动注入的类之一(不是行为/组件)。

因此,您需要将CdiContainer.get().getNonContextualManager().inject(this);调用到类构造函数中以触发CDI注入并使用注入的bean。