请求范围和视图范围



可能的重复:
如何选择正确的bean范围?

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

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

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

请求范围是您的所有来源,包括BalusC链接的帖子,在您的请求到达服务器后不久开始存在,并在返回最后一位响应后不久被销毁。

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

只要您回发到同一视图(页),视图作用域就会一直存在。这是通过名为javax.faces.ViewState的隐藏形式参数实现的。如果您在服务器上使用保存状态,那么这个值就是某种逻辑映射的入口。JSF实现如何真正解决这一问题在这里并不重要(但是的,它主要只是一个Map)。

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

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

最新更新