托管 bean 中的 View 和 Request 范围之间的区别

Posted

技术标签:

【中文标题】托管 bean 中的 View 和 Request 范围之间的区别【英文标题】:Difference between View and Request scope in managed beans 【发布时间】:2011-08-26 22:16:38 【问题描述】:

视图范围是什么意思?谁能解释一下,以便我了解它与请求范围有何不同?

【问题讨论】:

【参考方案1】:

@ViewScoped bean 的寿命与 JSF 视图一样长。它通常以新的 GET 请求或导航操作开始,然后只要最终用户将视图中的任何 POST 表单提交给返回 nullvoid 的操作方法(并因此导航回到相同视图)。一旦刷新页面,或返回非null 字符串(甚至是空字符串!)导航结果,则视图范围将结束。

@RequestScoped bean 的生命周期与 HTTP 请求的生命周期完全相同。因此,它将在每个请求结束时被丢弃,并在每个新请求时重新创建,从而丢失所有更改的属性。

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

另见:

How to choose the right bean scope? The benefits and pitfalls of @ViewScoped

【讨论】:

@sessionscope 特别是当它与浏览器中的选项卡共享会话时会产生很多问题。谢谢 BalusC。 @Makky:只是不要将@SessionScoped 用于请求范围或查看范围数据。另见***.com/questions/7031885/…

以上是关于托管 bean 中的 View 和 Request 范围之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse Inidigo 中的注释声明托管 bean 和代码完成 [重复]

从视图范围的托管 bean JSF 填充数据表

java jsf 如何去重新加载bean

在类中使用托管bean设置变量,并从另一个托管bean中的此类获取变量

GlassFish 域中的 JSF 托管 Bean 唯一性

使用 URL 参数的 JSF 托管 Bean 方法调用