【问题标题】:Can I use the same backing bean for two pages?我可以对两个页面使用相同的支持 bean 吗?
【发布时间】:2025-12-11 19:00:02
【问题描述】:

我目前拥有的 JSF 支持 bean 表示“创建内容”的功能。 bean 对应于数据库中的一条记录。我必须创建另一个允许我更新内容的 html 页面。我可以使用相同的支持豆吗?因为它允许我更新数据库中创建的同一行?

【问题讨论】:

    标签: jsf


    【解决方案1】:

    技术上你可以。在 JSF 中,“支持 bean”的概念只是一个约定,而不是 JSF 固有的知识或以任何方式强制执行的东西。

    然而,约定并非没有意义。在大多数情况下,让一个支持 bean 支持一个视图是最好的方法。

    我担心这句话“bean 对应于数据库中的一条记录。

    对我来说,这听起来像是一个 (JPA) 实体,因此根本不应该是一个支持 bean。

    支持 bean 提供特定于视图的功能。它们调用(EJB)服务并提供对(JPA)实体的访问,但它们两者都不是。

    【讨论】:

    • 因此,如果有一个表单提供更新书籍数据库的功能,例如(书名,作者)这两个字段存在于数据库中,也存在于支持 bean 中,启动时表单应该显示存储在数据库中的值。我可以不将支持 bean 也注释为 jpa 实体吗?我需要为同一件事创建另一个 pojo 吗?表示带有作者和标题等字段的书表?
    • 我想说的是,支持 bean 也具有与表单文本框相对应的相同字段,例如标题和作者。我还可以将同一个类注释为休眠实体并将值保存在数据库中吗?
    • >我可以不将支持 bean 也注释为 jpa 实体吗?不,你不能这样做。 JPA 实体具有截然不同的生命周期。
    • >我需要为同一件事创建另一个 pojo 吗? - 当然不。不要使用分散/聚集反模式(将实体复制为支持 bean 中的字段)。直接从支持 bean 返回实体并绑定到该实体。参见例如这个:code.google.com/p/javaee6-crud-example/source/browse/src/… 和使用它的视图:code.google.com/p/javaee6-crud-example/source/browse/WebContent/…
    • 只是为了给这个答案添加一些信息,在几个页面中相同的托管 bean 的一个很好的用法是一个 @ApplicationScoped bean,它包含 Map<String, String> 的值,在应用程序,如国家列表或婚姻状况(当然这取决于设计)。
    最近更新 更多