java - JSF 中表单、数据表等的最佳实践

标签 java jsf jakarta-ee model-view-controller managed-bean

我应该为 JSF 中的每个表单、数据表等提供一个 bean 吗?

例如,我有一个注册表格,它只有 2 个字段和一个按钮,它们是: 昵称,密码,提交

应该将此表单提交到 RegistirationFormBean 还是 UserBean 或 UserServiceBean 中的某处?

什么是最佳实践?

谢谢。

最佳答案

要决定是否应该专门为页面的一个组件(例如表单、数据表)创建一个@ManagedBean,我相信您应该考虑模块化 你的设计。

您应该问自己的第一个问题是:该组件会在许多页面中重复使用吗?。例如,在 ChangePasswordDeleteAccount 等敏感页面上,通常,您会在执行任何逻辑之前要求用户输入当前密码以验证其身份。在这种情况下,您绝对应该有一个用于验证密码组件的专用 bean,这样您就可以一次又一次地重复使用该组件,而不必每次都重新编写验证函数代码。

其次,我通常使用 @ManagedBean 作为存放所有相关 功能的地方,这些功能都朝着相同的目标 工作。这组功能可能非常主观。例如,我可以有一个名为 CreateProduct.xhtml 的页面,其中包含一个名为 CreateProductBean 的 bean,它具有创建产品的所有功能。在这种情况下,它就像是 每个 View 1 个 bean。另一种方法是拥有一个名为 ProductManager 的 bean,它具有与 Product 对象相关的所有功能(即创建、读取、更新、删除)。在这种情况下,它类似于 1 个 bean 用于多个 View (例如 CreateProduct.xhtmlRemoveProduct.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/

相关文章:

jakarta-ee - 注入(inject)返回字符串 CDI 的生产者方法

jakarta-ee - 找不到工厂 : javax. faces.application.ApplicationFactory

java - 存储在请求范围内 - 从 SOAPHandler 到 @Producer

java - 如何在 webapp 中寻找内存泄漏?

java - 在Java中_not_调用父类(super class)构造函数的任何方法?

java - 将类实现接口(interface)传递给另一个实现相同接口(interface)的构造函数?

java - java中没有但c++具有这些功能的OOP功能是什么?

java - : a[j]-a[i] i>=j 算法的复杂性和效率

maven - JSF 找不到 h :inputFile tag

java - 从 jar 文件加载的流程中 View 状态中的相对 View