【问题标题】:Best Practice to Handle Backing Bean initialization with JSF 2.0 jsf-2.0使用 JSF 2.0 jsf-2.0 处理支持 Bean 初始化的最佳实践
【发布时间】:2010-10-27 11:21:24
【问题描述】:

我的后备 bean 中有一个 @PostConstruct init() 函数,它执行冗长的数据库查询。

支持 bean 是 @SessionScoped。

每次我执行 Ajax 查询时,我都会点击 init() 并且数据库查询会再次触发。

在触发数据库查询之前,我是否需要在我的 init() 中检查生命周期阶段?还是应该将详细信息存储在更持久的对象中,例如当前用户?

最好的问候, 艾伦

【问题讨论】:

    标签: java jsf jsf-2


    【解决方案1】:

    @PostConstruct for @SessionScoped bean 在每个用户会话中只执行一次,因此它是初始化 bean 的正确位置。确保 bean 确实在会话范围内,并且它的多次执行实际上并不是来自不同的用户(=> 会话)

    【讨论】:

    • 感谢您的帮助——你们是最棒的。字面上地。仔细检查 SessionScoped - 那里很好。我作为唯一用户的专用开发服务器。检查会话 ID - 会话 ID ("e6de4c1d14184029f952925cce79") 在第一次调用 init() 和第二次从 Ajax 请求调用 init() 之间没有变化。但是,“this”(指支持 bean 实例)的值确实发生了变化。一些意想不到的事情正在发生。想法?
    • 嗯,给我们更多的细节。例如,faces-config。无论您是否使用 CDI。
    • 隔离并删除了页面上创建对新支持 bean 实例的引用的元素。仍然不确定 为什么 ajax 请求引用了一个新的支持 bean 实例。当我宁愿理解但前进的压力很大时,这是一种解决方法。谢谢。
    • 可能是您的 JSF 实现中的错误。尝试升级(如果有更新版本)
    猜你喜欢
    • 2010-10-19
    • 2012-08-03
    • 1970-01-01
    • 2011-09-14
    • 2012-05-21
    • 2012-09-03
    • 2011-01-19
    • 2012-09-06
    相关资源
    最近更新 更多