【发布时间】:2011-07-28 05:15:17
【问题描述】:
我发布了几个问题,但尚未得到任何答复。我在这里陈述的所有内容都主要涉及 JSF 2.0.*。
一个典型的 bean 包含要在页面上显示的信息。常见的基于 Web 的业务应用程序是一组页面,其中每个页面都涉及查看-编辑-保存状态,这些状态由多个 xhtml 页面表示。所以我们创建了一个 bean 来管理这些状态。但是有几个问题我将很快描述:
1) 每个页面都是不同的视图,因此迫使您将 bean 放入会话范围。这会导致会话存储膨胀。
2) 在视图之间传递参数。为了编辑文档,应该知道文档或/和另一组对象的 ID。将它们放入会话不是一个好的决定(臃肿的会话反模式)。
到目前为止,已经尝试了几次纠正这种情况的尝试。
a) t:saveState。它多年来一直在做它的工作。但现在我们正在摆脱它。
b) 无缝对话。它在对话结束的确切时刻带来了很多问题。超时不是一个容易设置的参数,因为我们不知道业务用户将编辑文档多长时间。不是我们的解决方案。
c) CODI(未尝试) 这似乎是一个不错的 JSR 299 实现,并且可能会解决所有问题,但它几乎没有文档记录,并且由于是扩展,因此坚持使用 WELD,即另一个框架,我们只想使用 JSF 的所有力量。
d) Spring 网络流。嗯,它是一个非常好的框架,有大量的文档,很棒的 IOC 容器、流范围和它提供的所有其他好东西都可以作为补救措施。它解决了多标签问题(这是我的措辞,如果不清楚我的意思,请原谅我)。想象一下,我们有一个编辑页面并查看范围 bean,我们正在填写表单。如果用户在新选项卡中打开另一个页面,则会触发 GET 请求并且 bean 超出范围。 Web 流可以识别此类问题并在打开新选项卡时启动新流。
(继续Web Flow)但它是单片的,将迫使我们重写整个项目。是的,我知道它支持 JSF,我已经测试并摸索了一段时间,看看它是否符合要求。这不是因为它的安全性。不幸的是,我们没有时间和资源从头开始构建一个新项目。
我们的解决方案几乎用完了。 JSF 是一个很棒的框架,已经过广泛的测试并在许多项目中使用。但开发人员拒绝在其中包含 CDI。
任何人都可以推荐任何解决方案来解决单个 bean 的编辑-视图-保存问题吗?任何架构建议都会有很大帮助。非常感谢您。
【问题讨论】: