JSF:绑定来自同一表单字段的两个值

时间:2014-04-07 09:28:41

标签: java spring jsf

我在用户登录时在login-bean中设置一个值 使用

- 的登录豆

 setMailNickname(mailnickname);

在信息页面中,我可以使用

检索相同的值

- 的 InfoPage

 <h:inputText value="#{login.mailNickname}" />

现在在信息页面上,我从用户那里获取更多信息并将所有信息保存在数据库中,因为其中一个值来自登录表单bean,它是在信息页面上预先填充但是如何分配与info-page bean变量相同的值 -

InfoBean.mailNickname

以便可以使用用户提供的其他字段将其保存到数据库中。 如何将值分配给infopage bean变量?

1 个答案:

答案 0 :(得分:1)

您可以将LoginBean注入InfoBean,以便您可以引用其字段。据我所知,你的一个bean至少是@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可能不存在但是在创建应用程序范围的时候。)