托管 bean 中视图和请求作用域之间的区别

视图作用域是什么意思?有人能解释一下吗,这样我就能理解它与请求范围有什么不同了?

110794 次浏览

@ViewScoped bean 的寿命与 JSF 视图的寿命完全一样长。它通常以一个新的 GET 请求开始,或者以一个导航操作开始,然后只要最终用户将视图中的任何 POST 表单提交给一个返回 nullvoid的操作方法(从而导航回 一样视图) ,它就会继续存在。一旦刷新页面,或者返回非 null字符串(甚至是空字符串!)导航结果,然后视图范围将结束。

@RequestScoped bean 的生存时间与 HTTP 请求的生存时间完全相同。因此,它将在每个请求结束时被垃圾处理,并在每个新请求时重新创建,从而失去所有更改过的属性。

因此,@ViewScoped bean 在支持丰富 Ajax 的视图中特别有用,这些视图需要跨 Ajax 请求记住(已更改的)视图状态。在每个 Ajax 请求上都会重新创建一个 @RequestScoped,因此无法记住所有已更改的视图状态。请注意,@ViewScoped bean 不会像 @SessionScoped bean 那样在同一个会话中的不同浏览器选项卡/窗口之间共享任何数据。每个视图都有自己独特的 @ViewScoped bean。

参见: