java - 表示层(JSF)应如何与服务层(Spring)互操作?

标签 java architecture jsf jakarta-ee

我知道存在许多不同的架构。在这个问题中,我考虑了 3 层架构(表示-服务(繁忙逻辑)-数据访问层 (DAO))。我想重点讨论表示层如何与服务层配合使用。

我遇到的问题是标准的。我有无状态服务层,我认为出于可扩展性和性能的考虑,它应该是无状态的。
我还有状态表示层。例如,当用户填写某些表单并且输入的值未通过验证时,最好显示具有输入值的所有字段并指向不正确的字段。

因此,假设我们有 FooBean,其方法为 setFoo (Foo f)getFoo ()doSave ()。 Bean 具有 session 范围。
我们想要保存(持久化)Foo 的新实例。我们所做的是调用方法setFoo(),然后调用方法doSave()。如果保存失败,用户将看到刚刚填写的包含所有输入值的表单(调用 getFoo () 方法)。

这很好,但现在想象一下用户单击 Create Foo 链接,填充所有字段,尝试保存但未通过验证?他将再次看到填写的表格。然后他再次单击“Create Foo”(他想同时创建 2 个 Foo 对象)。他会看到充满了尖锐错误的表格。但这很糟糕,因为他还没有填写这张(第二张,新的)表格。

如果我们将 FooBean 范围更改为 Request,那么我们将无法在必要时(保存失败后)显示填写的表单。

那么,出路在哪里呢?正确的解决方案是什么?它可以是特定于 JSF 的,也可以是通用的。

最佳答案

你需要一种叫做“对话”的东西。有多种方法可以实现这一目标。:

对话是自动或手动管理的范围,其范围大于请求,但小于 session 。理想情况下,它应该存储您的 Bean,只要它们需要存储即可 - 即在一个对话中。因此,从您的示例来看,第一个对话将在用户离开第一页时结束。

MyFaces Orchestra(我无法区分接缝)还可以区分不同的浏览器窗口/选项卡。

关于java - 表示层(JSF)应如何与服务层(Spring)互操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1929668/

相关文章:

jsf - PrimeFaces Dialog + appendToBody=true 不起作用

java - 部署tomcat 7时出现PermGen Space错误?

java - 如何从 JVM 内存中清除明确的敏感数据?

architecture - 在哪里可以找到为数千个并发用户传输音乐的网站的系统架构?

ruby-on-rails - Rails 架构问题

jsf - JSF 1.2和JSF 2.x之间的JSTL xmlns namespace 差异?

java - Primefaces 响应 <p :panelGrid> not working with 5 columns

java - 使用自定义注解

java - 如何在具有多种类型的customViewHolder的recyclerView中实现recyclerView.smoothScrollToPosition(position)?

java - Maximiser CRM 数据迁移,从二进制图像列中取消编码电子邮件文本