当用户登录时,我在登录 bean 中设置了一个值用
--登录豆
setMailNickname(mailnickname);
在信息页面中,我能够使用
--信息页面
<h:inputText value="#{login.mailNickname}" />
现在在信息页面上,我从用户那里获取更多信息并将其全部保存在数据库中,由于其中一个值来自登录表单 bean,因此它在信息页面上预填充,但如何将相同的值分配给信息页面 bean 变量-
InfoBean.mailNickname
以便可以将其与用户提供的其他字段一起保存到数据库中。如何将值分配给信息页 bean 变量?
您可以将 LoginBean 注入 InfoBean,以便您可以引用其字段。据我了解,你的一个豆子至少是@SessionScoped。您没有提供该信息,所以我甚至会猜测LoginBean用于登录您的应用程序或类似的东西,而InfoBean用于保存该信息以供将来参考。按照这个思维链,你的InfoBean看起来像这样:
@ManagedBean
@SessionScoped
public class InfoBean {
private String mailNickname;
public String getMailNickname() {
return mailNickname;
}
public void setMailNickname(final String mailNickname) {
this.mailNickname = mailNickname;
}
// other fields, methods...
}
然后,您的 LoginBean 将保留对会话范围的 InfoBean 的引用:
@ManagedBean
@ViewScoped
public class LoginBean {
private String mailNickname;
public String getMailNickname() {
return mailNickname;
}
public void setMailNickname(final String mailNickname) {
this.mailNickname = mailNickname;
}
@ManagedProperty("#{infoBean}")
private InfoBean infoBean;
public void setInfoBean(final InfoBean infoBean) {
this.infoBean = infoBean;
}
/** Method you use for populating */
public void populateInput(final String mailNicknameFromDb) {
setMailNickname(mailNicknameFromDb);
infoBean.setMailNickname(mailNicknameFromDb);
}
}
记住这些字段的 getter 和 setter 以及 managedProperty 的 setter,并注意作用域(例如,您不能将请求范围的 Bean 注入到应用程序范围的 Bean 中,因为在创建应用程序范围的 Bean 时,请求范围的 Bean 可能还不存在)。