我创建了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中不起作用。
答案 0 :(得分:1)
您的UserNameValidator类是一个非托管类,而不是Wicket自动注入的类之一(不是行为/组件)。
因此,您需要将CdiContainer.get().getNonContextualManager().inject(this);
调用到类构造函数中以触发CDI注入并使用注入的bean。