JSF 2.0 有比 Icefaces 更好的 Ajax Push

Posted

技术标签:

【中文标题】JSF 2.0 有比 Icefaces 更好的 Ajax Push【英文标题】:Is there a better Ajax Push for JSF 2.0 than Icefaces 【发布时间】:2011-03-30 05:07:23 【问题描述】:

我想在基于 Java 的 Web 应用程序中实现 Ajax Push 来更新网页上的库存商品数量等内容,因为它们在没有用户交互的情况下发生变化。我知道执行此操作所需的技术称为 Ajax Push。我也有一些 JSF 2.0 的经验,这是首选但不是必需的。

首先,我们需要大约几周后的演示,但如果该演示被接受,我们将有足够的时间来做正确的事。

我环顾四周,发现 Icefaces 显然做得很好,我会调查一下。我只是想听听是否碰巧存在其他对我们来说可能更好用的东西?

请不要回答“这些是来自 Google 的前三名”的答案。我想听听基于经验的意见。

【问题讨论】:

我们最终决定不提供基于 Ajax 的功能,因此我们不需要推送。 到目前为止,您是否使用过 Ajax Push for JSf 2?如果是,您能提供一些您的经验吗? @Theo,还没有。您可能想打开一个新问题,专门询问您想知道什么。 【参考方案1】:

我不知道它是否更好,因为我不做 IceFaces,但PrimeFaces 也有一个<p:push> 组件。它在底层使用Atmosphere 尽可能地独立于应用程序服务器,这反过来已经非常棒了。它将所有应用服务器特定的细节抽象出来。另见这篇关于Servlet 3.0 vs. Atmosphere的文章:

在您部署应用程序时,Atmosphere 始终会自动检测到最佳异步 API。它总是首先尝试查找 3.0 Async API。如果失败,它将尝试查找 WebServer 的原生 API,例如 Grizzly Comet (GlassFish)、CometProcessor (Tomcat)、Continuation (Jetty)、HttpEventServlet (JBossWeb)、AsyncServlet (WebLogic)、Google App Engine (Google)。最后,它将回退到使用阻塞 I/O 线程来模拟对异步事件的支持。

PrimeFaces User Guide (PDF) 的第 6 章详细解释了如何让这一切发挥作用,就像在 <p:push> 展示页面中展示的聊天应用程序一样。

【讨论】:

它在纸上看起来不错,但正如 @Gabor 在另一个答案中所说,让它发挥作用更加困难。实际上,在这个答案之后,我决定玩一下它。它确实不适用于当前的 Atmosphere 0.6.x 版本。您将需要 0.5.x,然后至少需要 0.5.1。 PF 家伙应该在下一个 PF 版本中赶上它。一般来说,我可以推荐 PF 作为组件库。但这有点主观,因为我没有广泛使用 IceFaces。我唯一的经历很糟糕,因为我无法让它在 GF v3 上运行,而且修复需要 EE 版本(不是免费的)。【参考方案2】:

我们已经尝试过 Icefaces(JSF 1.2 模式)和带有 Primefaces 的 Atmosphere/Comet。

Icefaces push 开箱即用,效果极佳。

我们无法让 Atmosphere 工作(在 Primefaces 中),但这可能是因为我们尝试使用最新 (0.6) 版本,而 Primefaces 还不支持它 - 所以现在我们正在等待更新版本(承诺它将成为 p:dataTable 重写后的下一个大特性)。在我们的例子中,推送不是演示中的关键元素,我们可以轻松地使用轮询而不是真正的推送解决方案。

Icepush 很容易启动和运行,而 Atmosphere 没有很好的文档记录(恕我直言),并且需要一堆 jars 和配置。它肯定不适合初学者。

所以,如果 ajax:push 是您演示的关键部分,我建议您继续使用 JSF 1.2 和 Icefaces。至少在演示完成并且客户满意之前 - 之后您仍然可以花时间进行 Atmosphere 配置;-)

【讨论】:

【参考方案3】:

您现在可以在 ICEfaces 之外使用 Ajax Push。结帐http://www.icepush.org/。有 JSP、Spring MVC、Wicket、GWT、jQuery、原型和 Grails 的客户端适配器。

【讨论】:

【参考方案4】:

我认为 ICEfaces 是 AJAX PUSH 的最佳解决方案,他们开创了它,并且在我看来他们拥有最好的实现。

【讨论】:

【参考方案5】:

ICEfaces 绝对是满足短期演示要求以及长期“正确行事”目标的最佳选择。

首先,ICEfaces 为开发推送应用程序提供了最自然的模型。您可以简单地考虑导致应用程序状态更改的服务器端触发器。剩下的工作由 ICEfaces 和 JSF 完成,影响新状态的无缝呈现。没有凌乱的推送标签标记,您必须准确地声明演示文稿如何随每个推送事件发生变化。如果您了解 JSF,那么使用 ICEfaces 向应用程序添加推送非常简单。首先让您的基本 JSF 应用程序正常工作,然后将必要的推送逻辑添加到您的服务器端代码中。无需其他更改。

从长远来看,您应该知道 ICEfaces 提供了企业级部署所需的所有部署技术。企业推送服务器对此至关重要,因为它在集群环境中提供了完整的推送连接管理(请参阅:EPS)。 ICEfaces Ajax Push 在许多财富 500 强企业的广泛生产环境中运行,因此您可以放心,它将根据您的需求进行扩展。此外,还提供专业的客户支持。这些都是关键特征,可以帮助您销售演示背后的内容。

市场上没有其他东西可以与之相比,期待 ICEfaces 2.0 兼容 JSF 2.0,并带来下一代 Ajax Push 功能。它现在提供 Beta 版。

【讨论】:

这是基于个人经验还是推销?【参考方案6】:

Primefaces 看起来很有希望,但推送功能不适用于他们的最新版本。使用 Icefaces 2 测试版,推送工作 OOTB。

【讨论】:

【参考方案7】:

jsf 2.2 有一个独立的基于大气框架的推送实现,名为 Ext JSF Push。它完全集成到 JSF 中,可以推送到单个客户端、直接将渲染推送到一组客户端或将渲染事件推送到一组客户端:

<e:push id="some-channel" direct="true">
    <h:outputText id="text" value="#pushTest.value"/>
</e:push>

push 标签内的渲染事件可以通过传统的渲染属性或代码调用来触发。渲染透明地广播到所有连接的客户端 (http://www.intersult.com/wiki/page/JSF%20Ext%20Push)。

【讨论】:

以上是关于JSF 2.0 有比 Icefaces 更好的 Ajax Push的主要内容,如果未能解决你的问题,请参考以下文章

jsf/icefaces 中的 javascript

JSF:使用带有 ICEfaces 的 AJAX 推送 (ICEpush)

为 JSF/ICEfaces 设置浮点格式化语言环境?

JSF,重复组件 ID,同时从 IceFaces 1.8 迁移到 3.3 [重复]

哪种方法用于将动作回调绑定到 JSF/ICEFaces InputFile?

Primefaces,icefaces,myfaces跟JSF哪个功能强大,各自的优缺点