【问题标题】:How should presentation tier (JSF) interoperate with services tier (Spring)?表示层 (JSF) 应该如何与服务层 (Spring) 互操作?
【发布时间】:2014-02-17 23:26:59
【问题描述】:

我知道存在许多不同的架构。在这个问题中,我考虑了 3 层架构(表示-服务(业务逻辑)-数据访问层 (DAO)。我想专注于表示层与服务层的工作方式。

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

所以,假设我们有 FooBeansetFoo (Foo f)getFoo ()doSave () 方法。 Bean 具有会话范围。
我们要保存(持久)新的 Foo 实例。我们所做的是调用方法setFoo(),然后调用方法doSave()。如果保存失败,用户将看到刚刚填写的所有输入值的表单(调用 getFoo () 方法)。

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

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

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

【问题讨论】:

  • 至少给我一个理由不将您的评论标记为“噪音、冒犯性或垃圾邮件”。
  • 因为他有一定的道理 ;) 虽然 48% 并不总是很糟糕,但它可能会让人们远离你的问题,例如认为你“忘恩负义”。
  • 严格说来,还有一个“这个答案有用”的按钮,也显得有点闲。
  • @Bozho:嗯,我认为'正确答案票'在这里不是为了欣赏,而是为了那些以后会发现这个问题的人(来自谷歌或本地搜索)。当我想表明我很欣赏一个答案时,我通常会写相应的评论。我也可以投票给那个答案。但这就是我在这里所能做的。
  • 虽然您说得有道理,但我怀疑您在 50% 的情况下都没有得到适当的答案。评论不是表达赞赏的方式。投票是,但你也没有太多的赞成票。

标签: java architecture jsf jakarta-ee


【解决方案1】:

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

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

MyFaces 管弦乐队(我不知道接缝)还可以区分不同的浏览器窗口/选项卡。

【讨论】:

  • 我发现的另一种方法是使用 Spring WebFlow。但在我的项目中,我使用了 MyFaces 管弦乐队。 Orchestra 的一大优点是只需在项目中添加/更改少量内容即可集成 Orchestra。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 2012-10-12
  • 2011-02-07
  • 2011-08-25
  • 1970-01-01
相关资源
最近更新 更多