ped*_*t92 0 jsf session-scope scopes
我已经阅读了范围(@SessionScoped, @ViewScoped, @ApplicationScope and @RequestScope)类型之间的所有差异,但是,我仍然在某种程度上遇到应用程序问题。我有一个page-1 与网格和我所选择的项目发送到page-2(两者page-1并page-2用相同的支持bean),以进行编辑,然后持续存在。据我所知,我的托管bean正在使用@RequestScoped,javax.faces.bean.RequestScoped这是理想的使用范围,但是它不起作用,bean被破坏了,数据丢失了。
恢复该故事,我将注释更改为@SessionScoped并且可以正常工作,但是我想知道这是否是一个好习惯?因为我已经读到,使用这种方法不是一个好习惯,@SessionScoped因为在客户端注销之前数据将一直保持活动状态。
最佳实践是选择适当的bean作用域(会话作用域或另一个作用域)。根据情况选择适当的范围是@SessionScopedbean,因为在以下情况下:
RequestScoped:在每个HTTP请求-响应周期之后都会创建一个新bean,您在尝试请求范围时就已经遇到过:
Bean被破坏,数据丢失
ViewScoped:一旦导航到另一个页面(page-2针对您的情况),就会创建一个新bean
注:新豆也将创造你每次使用一个返回值相同页面交互不同的比void或null。
@ApplicationScoped:在该示例中根本没有任何意义(仅当您想在所有用户之间共享数据/状态时才使用它)
我强烈建议您查看以下问题:如何选择正确的bean作用域?其中提供了有关如何正确选择bean范围的详细说明。
可以考虑其他建议,具体取决于您的功能要求和/或应用环境:
当您在两个页面中使用相同的bean时,可以考虑使用一个JSF页面并使用rendered属性,然后可以将bean注释为@ViewScoped(在这种情况下,请不要忘记返回void或null在bean的action方法中)。您可以在此处找到一些示例:@ViewScoped的好处和陷阱。或者,
您可以利用新的Flash作用域概念,可以在此处找到一个示例:了解JSF2中的Flash作用域。或者,
如果您的环境已经支持CDI(或者您可以简单地添加CDI支持),那么@ConversationScoped就您的情况而言,使用将是最佳选择,您可能会在这里找到一个很好的例子:JSF 2 ConversationScope如何工作?。或者,
按照Kukeltje的评论,您可以使用Apache DeltaSpike提供的@ViewAccessScoped或@GroupedConversationScoped,这两种方法都比std更加灵活。。@ConversationScoped
| 归档时间: |
|
| 查看次数: |
6614 次 |
| 最近记录: |