我是 Java EE 的新手,并使用 netbeans 7.1.2 开发了第一个 Java EE 登录应用程序。我有一个名为“Users”的数据库表和实体,其中包含很少的查询,一个包含持久性单元的会话 bean“UsersFacade”,下面名为“authenticate”的方法是代码
public Users authenticate(String login_id, String pwd) {
Users user = (Users) em.createNamedQuery("Users.authenticate")
.setParameter("login_name", login_id)
.setParameter("password", pwd)
.getResultList().get(0);
最后我有 jsf 托管 bean,它是 sessionscoped,包含两个本地成员 login_name 和密码,jsf 页面 login.xhtml 与这些字段绑定,这个 bean 还具有身份验证方法,该方法反过来调用会话 bean 'UserFacade' 身份验证消息
@ManagedBean
@SessionScoped
public class Login implements Serializable {
private String login_name;
private String password;
private Users user;
private @EJB UsersFacade user_services;
public String authenticate() {
user = user_services.authenticate(this.getLogin_name(),this.getPassword());
if (user != null){
return "home";
} else {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage("login", new FacesMessage("Invalid UserName and Password"));
return "login";
}
到目前为止,一切都很好。但是,在主页上我想显示用户表的所有数据成员,以便我可以修改值并保存记录。在主页中我编码如下:
<h:outputText value="Welcome #{login.user.login_name}" />
假设我已经在托管 bean 中声明了用户(实体)并且我应该能够访问实体的属性但是当我运行应用程序时,我得到以下错误:
“controller.Login”类没有“用户”属性
如果我有 3 个不同的 1 个托管 bean 实现(3 个不同的用户界面用于 3 个不同的角色/类型的用户),任何人都可以建议我做错了什么以及将 jsf 页面与托管 bean 绑定的理想方法。我正在使用 JPA(实体、会话)和 JSF 托管 bean。太感谢了。