什么是托管 bean,每页应该使用多少个?

Posted

技术标签:

【中文标题】什么是托管 bean,每页应该使用多少个?【英文标题】:What is a managed bean and how many should I use per page? 【发布时间】:2013-12-24 03:25:46 【问题描述】:

我正在使用 JavaServer Faces 开发一个 Web 应用程序。

我找到了很多关于如何使用 JavaServer Faces 的示例和教程,但没有一个能够真正解释 Bean 的用途。我最初的想法是,Beans 代表形式。您在表单中输入数据并单击提交按钮,关联的 Bean 就会被数据填充并调用一个方法。

但是,到目前为止,我只看到了每页有一个 Bean 的示例,因此 Bean 也可以表示一个页面,从而包含多个表单。

我也对 Bean 的范围感到困惑。如果 Bean 代表表单或页面,则在请求结束后它应该变为无效。如果让 bean 存在于会话范围内,那么 Bean 会发生什么情况?您是否仍然能够以某种方式从中获取数据,或者一旦您返回它,它只会为您填写相关表格?

总结 - 什么是托管 Bean,您如何正确使用它?

【问题讨论】:

这对您有帮助吗Managed Beans ? 【参考方案1】:

当您不需要像手动执行someScopedMap.put("bean", new Bean()); 那样自己管理bean 实例时,bean 就是托管bean。框架会处理这个问题。这与页面是否包含表单无关。您基本上是在告诉框架“嘿,这是一个支持 bean 类 com.example.Foo。您可以将其用作名称为“foo”的托管 bean,并在 EL 表达式通过 #foo 引用它时将其放入范围 X 中,而不需要需要自己做这一切。框架(JSF、CDI、Spring 等)自行管理。

至于选择正确的范围,这在逻辑上取决于数据需要保存的范围。例如,您显然不想将提交的表单数据存储在应用程序范围内。否则,该网站的任何其他访问者都会看到它。只要有逻辑地思考并阅读How to choose the right bean scope?

至于“每个表单一个 bean”或“每个页面一个 bean”的概念,这实际上是主观的,因为两者在技术上都可以同样出色地工作,但就可维护性而言,强烈建议让您的类尽可能流畅,包括支持豆子。因此,“每个表格一个 bean”是更好的做法。不要将完全不同的职责放在一个类中。 Law of demeter 等。 bean 可以使用@Inject@ManagedProperty 轻松地相互访问。

另见:

JSF Controller, Service and DAO How to use <h:form> in JSF page? Single form? Multiple forms? Nested forms? Backing beans (@ManagedBean) or CDI Beans (@Named)?

【讨论】:

好的,我想我现在明白了。所以一个 Bean 基本上只是一种单例(在更广泛的意义上,可能存在多个对象,但每个请求只有一个,如果它是请求范围等),我基本上可以以我喜欢的任何方式使用它? (是的,每个表单一个 bean 似乎更有意义,尽管我不得不说,我想以某种方式对它们进行分组。不过,我猜这不是立即可行的) 您可以将它们分组。例如。 #mainbean.form1bean.entity.property 用于 form1,#mainbean.form2bean.entity.property 用于 form2。但是,#mainbean 的存在没有任何意义。只需给他们合理的类名(和固有管理的 bean 名称)。

以上是关于什么是托管 bean,每页应该使用多少个?的主要内容,如果未能解决你的问题,请参考以下文章

关于分页,如果每页10个数据,n个数据有多少页?如果每页x个数据呢?用c#解答,很急

Oracle实现分页,每页有多少条记录数

帝国cms的内容页面如何分页,把一片文章按照指定的字数分成几页,如何设定每页显示多少字符?

WGCLOUD如何设置每页显示多少条数据

每页本地存储?

jquery datatables 每页多少条