0

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

4

1 に答える 1