请求范围和视图范围

时间:2012-11-26 13:12:58

标签: jsf jsf-2

  

可能重复:
  How to choose the right bean scope?

我是JSF编程的新手,我需要澄清一下bean范围。我已经阅读了关于这个论点的所有问题,但还不是很清楚。 我不太了解请求范围。我理解:“这是默认范围,基本上bean在整个单个HTTP请求中都是活动的。”

例如,假设我们要求浏览器打开带有表单的网页。当我们发出请求时,会创建一个请求范围bean,生命周期开始,在呈现响应阶段之后,Java bean将被销毁。 然后我们填写表格,然后按一个按钮。这将启动另一个HTTP请求,对吗?

在同一个上下文中,如果一个视图范围bean而不是请求范围bean,有什么区别?创建了多少个bean实例?为什么在数据表中使用它更好?

1 个答案:

答案 0 :(得分:2)

请求范围,因为您的所有来源(包括由BalusC链接的帖子)说在您的请求到达服务器后很快就会生存,并且在响应的最后一位被发回后不久就会被销毁。

实际上,如果您回发表单,则会启动新请求,从而创建新的请求范围。这意味着将再次创建请求作用域的所有内容。因此,对于首先呈现的表单,然后回发一次,将创建2个请求范围的bean。

只要您回发到同一视图(页面),视图范围就会存在。这通过名为javax.faces.ViewState的隐藏表单参数来工作。如果您在服务器上使用保存状态,则此值是某种逻辑映射的条目。 JSF实现如何实际解决这个问题并不重要(但是,它主要只是一个Map)。

在回发之后,JSF能够通过此参数再次检索完全相同的视图范围bean。因此,对于首先呈现的表单,然后回发一次,将创建1个视图范围的bean。

对于数据表,您几乎总是希望使用视图范围。原因是您希望数据在回发之前和之后相同。如果您的数据是100%静态和/或您没有回发(表格不在表格中),则可以使用请求范围。