JSF:将AJAX推送与ICEfaces结合使用(ICEpush)



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

然而,它并没有按计划工作:它没有AJAX,它只是像其他任何非AJAX操作一样调用该操作并从该操作返回。

我使用的是最新的ICEfaces和ICEpush版本以及战斧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>

我错过什么了吗?谢谢

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

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

您可以使用以下任一命令按钮:

<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>

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

我的Eclipse告诉我,许多导入都是错误的,代码在一些函数上有不赞成使用的标记。那里的这些家伙发展得如此之快,以至于他们的文件永远过时了。所以,请仔细阅读您的工具对代码的描述!

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

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

在服务器端,您所需要做的就是注册IcePush servlet,并在客户端使用JavaScriptapi初始化IcePsh连接。

相关内容

  • 没有找到相关文章

最新更新