什么是托管 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#解答,很急