【问题标题】:facescontext is released before thread finish to work [duplicate]在线程完成工作之前释放 facescontext [重复]
【发布时间】:2012-03-10 16:11:19
【问题描述】:

我正在从一个支持 bean 调用一个线程,该 bean 产生许多 db 活动。 我想在上下文中添加消息, 但是直到我到达 run() 方法的末尾,上下文已经被释放。 如何在线程的 run() 方法中将消息添加到上下文中, 不依赖bean?

【问题讨论】:

    标签: java jsf facescontext


    【解决方案1】:

    faces 上下文实例通过 ThreadLocal 绑定到为当前请求提供服务的线程。您可以尝试检索 FacesContext 实例并将其作为变量传递给线程,然后再启动它。

    【讨论】:

    • 我试过了,还是不行。
    • 我假设您在调用应用程序阶段启动线程?如果是这样,您是否在返回结果字符串之前等待它们完成?
    • 显然不是,考虑到问题:)
    【解决方案2】:

    是的..您可以使用 ajax push 来做到这一点... 你可以使用素面或任何你想做的推...

    您应该为通知制作一个 bean.. 并且每当您想在客户端上通知时(如您所愿)以某种方式宣布该 bean...考虑一下 :)

    通过这种方式,您可以在 30 分钟后向客户宣布他想要的事情已经完成......

    在最坏的情况下,您可以在 javascript 中使用“setInterval”函数...定期检查 servlet 是否有消息...

    这里是a tutorial for commet..

    更多关于comet here的详情

    (是的.. ajax 推送是一个很长的路要走.. - 如果你想自己做的话)

    干杯。

    【讨论】:

    • 在我的网络中,我们不使用 prime 或 ice。您知道还有其他选择吗?
    • 你可以使用 jQuery 或你想要的东西(甚至是纯 javascript - 我建议每个人都使用 jQuery,因为它是跨浏览器).. 自己做一个 ajax 推送......我认为你可以使用servlet .. 阅读此内容:en.wikipedia.org/wiki/Comet_(programming) 但我建议您仅对需要的页面使用 primefaces :)
    • 也许你可以给我一个例子,因为我不太了解?
    • 这里是一个推送的例子:primefaces.org/showcase/push/chat.jsf ...如果我找到一个ajax推送教程,我会编辑我的帖子
    • 我的意见是你应该使用 primefaces.. 仅用于这种情况.. :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多