我应该为 JSF 中的每个表单、数据表等提供一个 bean 吗?
例如,我有一个注册表格,它只有 2 个字段和一个按钮,它们是: 昵称,密码,提交
应该将此表单提交到 RegistirationFormBean 还是 UserBean 或 UserServiceBean 中的某处?
什么是最佳实践?
谢谢。
最佳答案
要决定是否应该专门为页面的一个组件(例如表单、数据表)创建一个@ManagedBean
,我相信您应该考虑模块化
你的设计。
您应该问自己的第一个问题是:该组件会在许多页面中重复使用吗?
。例如,在 ChangePassword
或 DeleteAccount
等敏感页面上,通常,您会在执行任何逻辑之前要求用户输入当前密码以验证其身份。在这种情况下,您绝对应该有一个用于验证密码组件的专用 bean,这样您就可以一次又一次地重复使用该组件,而不必每次都重新编写验证函数代码。
其次,我通常使用 @ManagedBean
作为存放所有相关 功能的地方,这些功能都朝着相同的目标 工作。这组功能可能非常主观。例如,我可以有一个名为 CreateProduct.xhtml
的页面,其中包含一个名为 CreateProductBean
的 bean,它具有创建产品的所有功能。在这种情况下,它就像是 每个 View 1 个 bean
。另一种方法是拥有一个名为 ProductManager
的 bean,它具有与 Product
对象相关的所有功能(即创建、读取、更新、删除)。在这种情况下,它类似于 1 个 bean 用于多个 View
(例如 CreateProduct.xhtml
、RemoveProduct.xhtml
)。为了方便以后的维护和分工,我一般使用1个bean per view
。第二种方法 1 bean for many views
在某些情况下也很好,但我突然想不出一个例子 :P... 我会在找到合适的答案后更新我的答案 ;).
第三,我更喜欢遵循 3 层 MVC 模型并将后端逻辑与前端分开。例如,要在数据库中保存一个新帐户,我将注入(inject)一个 @EJB
或一个 @WebServiceRef
来要求后端系统执行必要的逻辑。将来肯定更易于维护:)。
因此,使用您的 RegisterAccount
示例,我将拥有
- 1 个名为
UserExistenceValidator
的 bean,用于检查数据库中是否存在nickname
。在注册期间,如果用户选择了一个被占用的nickname
,我会抛出一个错误。我还可以使用此 bean 检查用户是否存在于AddFriend.xhtml
页面中。 - 另一个名为
RegistirationFormBean
的 bean 用于捕获用户的输入并与后端对话以保留新帐户。
关于java - JSF 中表单、数据表等的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16114952/