【发布时间】:2012-09-06 20:18:41
【问题描述】:
我一直在考虑这个问题,但还没有想出一个最佳实践来在 JSF 项目中为表示层组织我的 bean/类。显然有很多因素在起作用,但我想讨论一下。这是我目前的思路:
考虑一个包含视图页面(查看数据)和编辑页面(添加、更新、删除数据)的基本 JSF(不幸的是,仍然停留在 JSF 1.xx 上)。以下是我组织项目的方式:
请求范围内的BackingBean:
- 查看相关内容(保存状态、渲染逻辑等)。仅在一个请求中需要的东西
- 操作、操作侦听器和值更改侦听器。如果它们适用于多个视图,则可以将它们分离到自己的文件中。
会话范围的 BackingBean:
- 任何需要保留超过一个请求的时间。数据库数据、SelectItems 等。
- 此 bean 被注入到请求 bean 中,并存储任何数据对象的实例
数据对象:
- 把数据对象做成bean似乎没有意义,所以分开存放。这将是诸如用户、书籍、汽车之类的东西,您将在页面上显示的任何对象。该对象还可以包含视图辅助方法,例如 getFormattedName() 等。
道:
- 处理与业务逻辑层的所有交互的非 bean 对象。它加载数据bean并准备提交等。我通常将其设为公共静态方法类。
转换器、验证器:
- 单独的文件
这似乎是您的普通 JSF 应用程序所需的全部内容。我已经阅读了这个:http://java.dzone.com/articles/making-distinctions-between,以及这里的回复:JSF backing bean structure (best practices),但我从来没有觉得我们有一个完整的画面。 BalusC 的回复很有帮助,但似乎并没有完全涵盖完整的应用程序。让我知道你的想法!
【问题讨论】:
-
回答这个问题的不是我。更重要的是,我个人不同意这个答案。另请参阅stackoverflow.com/questions/7223055/… 要补充此答案,您可能会发现以下答案很有帮助:stackoverflow.com/questions/7031885/… 是的,JSF 2.x,但同样的原则也适用于 JSF 1.x。
-
第一个链接就是我要链接的内容。不过,我在收到您的回复后遇到了一些麻烦。如果我理解正确,模型 bean 类似于我的数据对象,你说的控制器/托管 bean 应该是一个 bean,类似于我的 backingbean,尽管我将它分成两个以最小化会话量数据。准确吗?
标签: jsf architecture jsf-1.2 managed-bean backing-beans