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 があります。なぜインジェクションがページで機能するのかわかりませんが、バリデーターでは機能しません。