3

我正在使用 ICEfaces 和 ICEpush 将一些数据推送到浏览器。

但是,它并没有像计划的那样工作:它没有 AJAX,它只是调用操作并从操作返回,就像任何其他非 AJAX 操作一样。

我正在使用最新的 ICEfaces 和 ICEpush 版本以及 Tomahawk 7 和 JSF 2。

它既不适用于 Servlet 2.5 也不适用于 Servlet 3.0。

这些是我的 bean 的重要部分(视图范围):

public AjaxTest() {
    PushRenderer.addCurrentSession(PUSH_GROUP);
}

    public void addText() throws InterruptedException {
    for(int i = 0; i < 5; i++) {
        lines.add("line " + i);
        PushRenderer.render(PUSH_GROUP);
        Thread.sleep(1000);                     
    }
}

这是我的表格的一个片段:

    <h:panelGroup>
        <h:dataTable id="ajaxTestTable" value="#{ajaxTest.lines}" var="line">
            <h:column>
                <h:outputText value="#{line}" />
            </h:column>
        </h:dataTable>
        <h:commandButton id="startAjax" value="Start"
            action="#{ajaxTest.addText}" />
    </h:panelGroup>

我错过了什么?谢谢!

4

4 回答 4

2

ICEfaces 2.0 尚未与 MyFaces 集成。您是否使用包含的 Mojarra .jar 文件尝试过您的应用程序?

于 2011-05-24T15:35:12.367 回答
1

我只熟悉 Icefaces 1.8,但在我看来你的命令按钮没有启用 ajax。您还必须使用 actionListener 而不是 action

您可以使用 icefaces 命令按钮:

<ice:commandButton id="startAjax" value="Start" 
       actionListener="#{ajaxTest.addText}"/>

或 JSF 2 ajax 标签:

<h:commandButton id="startAjax" value="Start">
    <f:ajax listener="#{ajaxTest.addText}"/>
</h:commandButton>
于 2011-07-19T13:44:05.577 回答
0

你有一些可以验证代码的开发工具吗?至少在 ICEPush 的 Vaadin 版本上,你不能相信他们的例子。在他们的官方演示中,有已弃用的代码,在他们的聊天中,他们给出了来自另一个星球的正确代码的导入代码。

我的 Eclipse 告诉许多导入是错误的,并且代码在某些功能上已弃用标记。那里的这些人发展得如此之快,以至于他们的文件永远过时了。因此,请仔细阅读您的工具对代码的说明!

于 2011-05-24T16:00:40.903 回答
0

我还遇到了将 IceFaces(使用推送)与已经使用 Richfaces 的应用程序集成的问题。但是可以将 IcePush 直接与几乎任何 java-web-application(使用 Servlet Api)集成。您可以在http://achorniy.wordpress.com/2012/02/29/icepush-integration-to-web-application/上查看更多详细信息

这个想法是使用 IcePush 提供的 javascript-api(或 jQuery-api)。因此,您的带有 javascript-api 的页面将自己注册为推送通知的侦听器,并且在回调中您可以调用任何 javascript 函数来更新您的页面。在 Richfaces 示例中,您可以使用实际上由 jQuery 支持<a4j:jsFunction name="ajaxUpdateFunction" action="#{myBean.update} reRender="updatedComponent(s)" ajaxSingle="true"/>或执行 ajax-request 的 ajaxUpdateFunction()。在您的情况下(JSF-2.0),我认为您可以致电jsf.ajax.request(this, event, {render:'ajaxTestTable'})更新您想要的内容(示例http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/

在服务器端你需要做的就是注册 IcePush servlet 并使用 javascript api 在客户端初始化icePush 连接。

于 2012-03-02T11:31:56.143 回答