JSF 从一个托管 bean 获取值作为参数传递给另一个托管 bean

JSF Obtaining value from one managed bean to another as argument

我刚刚创建了一个登录托管 Bean,并且运行良好。它采用电子邮件和密码的值。

现在,我的问题是如何将LoginBean.java获取的email的值传递给我的UserBean.java.

index_customer.xhtml

<h:outputText value="#{userBean.firstname}"/>

UserBean.java

@ManagedBean(name="userBean")
public class UserBean {
   private static String firstname;
   private String lastname;
   private String email;
   private String password;

   public String firstname(String email){
       String fname;
       UserDAOImpl userDAOImpl = new UserDAOImpl();
       fname = userDAOImpl.getFirstName(email);
       return fname;
   }  

}

LoginBean.java

@ManagedBean(name = "loginBean")

public class LoginBean {

    private String email;

    public String getEmail() {
        return email;
    }
}

如何调用方法 getEmail() 并将电子邮件作为参数提供给 UserBeanfirstname(email) 方法?

这可能吗?我问的原因是,我想识别登录用户的名字,并使用 <h:outputText value="#{userBean.firstname}"/>

上的 EL 表达式显示类似 "Hello YourFirstName" 的内容

我之前使用过 swing,但我知道 web 有所不同,所以我猜静态变量不是在 JSF 中从一个 class 获取变量值到另一个 class 的正确方法。

我的 UserDAOImpl.getFirstName(email) 方法有一个 SQL 查询是

String SQL = "SELECT firstname from customer WHERE emailcolumn = email;

提前致谢。如果有任何帮助,我将不胜感激。

只需将 getEmail 的 return 值作为参数传递给 firstName 方法。

<h:outputText value="#{userBean.firstname(loginBean.email)}"/>

当然还有一些其他的细节。 您应该将此类数据保存在会话作用域的 bean 中。每次获取数据库访问都不是很健康。

How to choose the right bean scope?