Jsf @sessionscope是一种好的实践吗?
我已经了解了作用域类型之间的所有差异(Jsf @sessionscope是一种好的实践吗?,jsf,scopes,session-scope,Jsf,Scopes,Session Scope,我已经了解了作用域类型之间的所有差异(@SessionScoped、@viewscope、@ApplicationScope和@RequestScope),但是,我的应用程序仍然面临着某种问题。我有一个带有网格的page-1,我将所选项目发送到page-2(page-1和page-2都使用相同的支持bean)进行编辑,然后保存。我的托管bean使用的是javax.faces.bean.RequestScoped中的@RequestScoped,据我所知,它是理想的使用范围,但它不起作用,bean
@SessionScoped、@viewscope、@ApplicationScope和@RequestScope
),但是,我的应用程序仍然面临着某种问题。我有一个带有网格的page-1
,我将所选项目发送到page-2
(page-1
和page-2
都使用相同的支持bean)进行编辑,然后保存。我的托管bean使用的是javax.faces.bean.RequestScoped
中的@RequestScoped
,据我所知,它是理想的使用范围,但它不起作用,bean被破坏,数据丢失
继续讲这个故事,我已经将注释更改为
@SessionScoped
,它起了作用,但我想知道这是否是一个好的做法?因为我已经读到使用@SessionScoped
不是一个好的做法,因为在客户端注销之前,数据将保持活动状态 最佳实践是选择适当的bean范围(会话范围或其他范围)。在您的案例中要选择的合适的范围是@SessionScoped
bean,因为在以下情况下:
:在每个HTTP请求-响应周期之后将创建一个新bean,您在尝试请求范围时已经遇到了这个问题: bean正在被销毁,数据正在丢失RequestScoped
:一旦您导航到另一个页面(ViewScoped
,在您的情况下),将创建一个新bean NB:每次您使用与page-2
或void
不同的返回值与同一页面交互时,也将创建一个新beannull
:在该示例中没有任何意义(仅当您希望在所有用户之间共享数据/状态时才使用它)@ApplicationScoped
呈现的
属性,然后您可以将bean注释为@ViewScoped
(在这种情况下,不要忘了在bean的操作方法中返回void
或null
)。您可以在此处找到一些示例:或@ConversationScoped
更灵活最佳实践是选择适当的bean范围(会话范围或其他范围)。在您的案例中要选择的合适的范围是
@SessionScoped
bean,因为在以下情况下:
:在每个HTTP请求-响应周期之后将创建一个新bean,您在尝试请求范围时已经遇到了这个问题: bean正在被销毁,数据正在丢失RequestScoped
:一旦您导航到另一个页面(ViewScoped
,在您的情况下),将创建一个新bean NB:每次您使用与page-2
或void
不同的返回值与同一页面交互时,也将创建一个新beannull
:在该示例中没有任何意义(仅当您希望在所有用户之间共享数据/状态时才使用它)@ApplicationScoped
呈现的
属性,然后您可以将bean注释为@ViewScoped
(在这种情况下,不要忘了在bean的操作方法中返回void
或null
)。您可以在此处找到一些示例:或@ConversationScoped
更灵活我不想直接编辑您的回复,但我认为在这些情况下,最好的范围是在DeltaSpike中提供。它比SessionScoped短,比ViewScoped长,与ConversationScoped相比,它是“自动的”maintained@Kukeltje感谢您提供的信息,但我的回答是这样的,因为OP似乎只讨论JSF范围,而没有提到CDI支持或任何其他库。因此,由于我们现在不知道他所处的确切环境,我首先建议选择合适的bean(如果他必须只使用JSF作用域),然后我提供了额外的建议,以防他不仅仅依赖JSF作用域。因此,如果他想使用外部库,使用
@viewAccessScope
对我来说是一个额外的建议