Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF2.0-bean作用域的可能性_Java_Jsf 2_Cdi - Fatal编程技术网

Java JSF2.0-bean作用域的可能性

Java JSF2.0-bean作用域的可能性,java,jsf-2,cdi,Java,Jsf 2,Cdi,我发了几个问题,但还没有得到任何答复。我在这里所说的一切都与JSF2.0有关 典型的bean包含要在页面上显示的信息。常见的基于web的业务应用程序是一组页面,其中每个页面都涉及视图编辑保存状态,这些状态由几个xhtml页面表示。因此,我们创建一个bean来管理这些状态。但有几个问题我将很快描述: 1) 每个页面都是不同的视图,因此您必须将bean放入会话范围中。它会增加会话存储空间。 2) 在视图之间传递参数。为了编辑文档,应该知道文档或/和另一组对象的ID。将它们放入会话中不是一个好的决定(

我发了几个问题,但还没有得到任何答复。我在这里所说的一切都与JSF2.0有关

典型的bean包含要在页面上显示的信息。常见的基于web的业务应用程序是一组页面,其中每个页面都涉及视图编辑保存状态,这些状态由几个xhtml页面表示。因此,我们创建一个bean来管理这些状态。但有几个问题我将很快描述:

1) 每个页面都是不同的视图,因此您必须将bean放入会话范围中。它会增加会话存储空间。
2) 在视图之间传递参数。为了编辑文档,应该知道文档或/和另一组对象的ID。将它们放入会话中不是一个好的决定(臃肿的会话反模式)

到目前为止,已经尝试了几次纠正这种情况的尝试

a) t:saveState。它已经做了很多年的工作。但现在我们正在摆脱它。 b) Seam对话。它在谈话结束的确切时刻带来了很多问题。超时不是一个容易设置的参数,因为我们不知道业务用户(例如)编辑文档的时间。这不是我们的解决方案。
c) CODI(未尝试)这似乎是一个很好的JSR 299实现,可能可以解决所有的问题,但它几乎没有文档记录,而且作为一个扩展,它坚持使用另一个框架WELD,我们只想使用JSF的所有功能。
d) Spring web流。好的,这是一个非常好的框架,文档丰富,非常好的IOC容器,流范围和它提供的所有其他好东西都可以作为补救措施。它解决了多制表符问题(这是我的措辞,如果不清楚我的意思,请原谅)。假设我们有一个编辑页面和视图范围bean,我们正在填充表单。如果用户在新选项卡中打开另一个页面,GET请求将被触发,bean将超出范围。如果打开了一个新的选项卡,Web流可以识别出这样的问题并启动一个新的流

(在Web流上继续)但它是单片的,将迫使我们重写整个项目。是的,我知道它支持JSF,我已经测试并摸索了一会儿,看看它是否符合要求。因为它的安全性,所以它不存在。不幸的是,我们没有时间和资源从头开始构建一个新项目

我们几乎没有解决办法了。JSF是一个伟大的框架,已经被广泛测试并在许多项目中使用。但开发人员拒绝将CDI包含在其中


有人能推荐任何解决方案来解决单个bean的编辑-查看-保存问题吗?任何架构建议都会大有裨益。首先,这是一个讨论而不是一个问题,所以永远不会有一个明确的“是”或“否”。。。除了客观的论据(开发人员不喜欢)之外,总有利弊之分;-)

无论如何,让我从确定您的情况对于所有类型的web应用程序来说都是非常常见的开始,您所描述的问题对于从体系结构的角度考虑web应用程序开发的每个人来说都更为常见

一年前,我们面临着几乎相同的情况,以下是我们的架构:

JavaEE6和JSF2.0、CDI(+EJB3和JPA,但这超出了本答案的范围)

  • ViewScopebean,每个视图一个(JSF ViewScope连接到CDI,带有Seam 3面)
  • ConversationScopeSFSB作为业务逻辑、事务/安全边界的每个用例的门面(门面由1-n视图控制器引用)
  • RequestScoped服务(无状态,可供其他客户端(通过不同的外观)重用)
所有这些都像一个符咒,层与层之间几乎没有粘合代码

1) 因此,每个页面都是不同的视图 强迫您将bean放入 会话范围。它付出了代价 使会话存储膨胀

2) 在视图之间传递参数。 为了编辑文档,应该 知道文件或/和其他文件的ID 一组对象。将它们放入 会议不是一个好决定 (膨胀的会话反模式)

我完全同意你。这就是我们使用对话的原因

b) 接缝对话。它强加了 关于一个精确的问题有很多 谈话一结束。时间到 这不是一个容易设置的参数 因为我们不知道一天有多长时间 例如,业务用户将 编辑文档。这不是解决问题的办法 我们

凭借3年的Seam 2/3生产经验,我向您保证,这是绝对可控的。对话就像手套一样适合一个用例,过了一段时间你就不想再使用其他任何东西了。当然不是会议;-)

c) CODI(未尝试)似乎是 nice JSR 299实现和, 潜能疗法可以解决所有问题 但它几乎没有记录,而且, 作为一个扩展,坚持 焊缝是另一个框架 我们只想利用所有的力量 JSF的应用

如果您想使用CODI,您不需要Weld,这两种都是JSR299实现。在撰写本文之时,焊接的记录和使用都比以前好得多。我甚至不知道CODI是否是最终的

d) SpringWeb流。嗯,这是一个非常重要的问题 很好的框架,文档丰富, 大IOC容器、流范围和 它提供的所有其他好东西都可以 这是一种补救办法。它解决了乘法制表符 问题(这是我的措辞,请原谅 如果不清楚我得到了什么,请告诉我 在)。假设我们有一个编辑页面和 查看作用域bean,我们正在填充 表格。如果用户打开另一个页面 在新选项卡中,启动GET请求并 这个bean超出了范围。网状物