【问题标题】:using more than one managed bean in same jsf page在同一个 jsf 页面中使用多个托管 bean
【发布时间】:2026-01-17 21:15:01
【问题描述】:

如果我有页面,假设包含两个不同的客户信息,我如何在同一个页面中使用两个不同的托管 bean(它们是同一个 java 类)?

作为总结,在同一页面中,我想在一个 bean 中保存一个客户的信息,在另一个 bean 中保存另一个客户的信息。

【问题讨论】:

  • 你为什么要问一个反问?当你尝试/做它时,它究竟是如何失败的?
  • 我不明白这个“我使用两个不同的托管 bean(这是同一个 java 类)”如果我理解得很好,只需使用 #{someBean.someproperty} 和 #{anotherBean.someproperty}
  • 我的意思是当它需要 someBean 和 anotherBean 是同一个 java 类:#{someBean.someproperty} 和 #{anotherBean.someproperty}

标签: jsf managed-bean


【解决方案1】:

我想在一个 bean 中保存一个客户的信息,另一个在 另一个豆子。

另一个用于相同目的的 bean 是复制,如果您认为它是合乎逻辑的。每个页面都有其页面的状态(生命)。当您尝试#{bean.customer} 时,它将返回相同的值。因为它的对象是一样的。

我建议改进您的代码,为视图使用另一个类,对您的应用程序进行分层。喜欢

//Base class
    public class Customer {
    private String id;
    /*
     *Other fields
     */

    //getter Setters
    }

@ManagedBean
@RequestScoped
public class PageBackingBean implements Serializable{
    List<Customer> customer = new ArrayList<>(); //can Hold more than one customer

    public PageBackingBean(){
           Customer cus1 = DataBase.loadByCustomerId(id);
           customer.add(cus1);

           Customer cus2 = DataBase.loadByCustomerId(id);
           customer.add(cus2);
    }

}

【讨论】:

  • 感谢您的回答,因为您说最好将它们分开。我只是不想创建两个非常相似的类。
  • 在它挽救生命之前,页面的支持有一个范围,而 bean 也有相应的生命。 Page 的所有 backings 可以恰好存储 1 条记录,例如在休眠 Pojo class== 数据库的 1 条记录中。当您遍历它时,它会丢失可渗透的。
最近更新 更多