我已经编写了从主页登录用户的代码,但我遇到了javax.ejb.EJBException。我的Web应用程序使用JPA,EJB和JSF。
在我的实体类中,我包含了以下命名查询。
@NamedQuery(name = "Users.findByUsernameAndPassword", query = "SELECT u FROM Users u WHERE u.username = :username AND u.password = :password"),
在我的无状态会话bean中,我创建了以下业务方法:
public Users AuthenticateUser(String username, String password) throws EJBException, SQLException {
Query q = em.createNamedQuery("Users.findByUsernameAndPassword");
q.setParameter("username", username);
q.setParameter("password", password);
return (Users)q.getSingleResult();
}
在我的EJB客户端中,我调用此方法如下:
user = usersFacade.AuthenticateUser(username, password);
if(user != null) {
// Reditect to home page.
} else {
// Show an error message.
}
我在输入错误密码时遇到异常。在输入正确的密码时,一切正常。在输入错误的密码时,我无法将用户重定向到主页并抛出托管bean代码中的错误消息。
请帮助我了解出现了什么问题,因为我是Java EE 7的新手。我无法正确处理EJBException和/或SQLException吗?请帮忙。
答案 0 :(得分:1)
你没有分享你得到的例外情况,但如果没有结果,getSingleResult
会抛出NoResultException
,所以你应该用 try / catch块包裹你的电话,相应地处理这个。