Pergunta

Estou usando ICEfaces com ICEpush para enviar alguns dados para o navegador.

No entanto, não funciona como planejado:Ele não faz AJAX, apenas invoca a ação e retorna da ação como qualquer outra ação não AJAX faz.

Estou usando as versões mais recentes do ICEfaces e ICEpush e Tomahawk 7 e JSF 2.

Não funciona com Servlet 2.5 nem com Servlet 3.0.

Estas são as partes importantes do meu bean (visualização com escopo):

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);                     
    }
}

E este é um trecho do meu formulário:

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

Perdi algo?Obrigado!

Foi útil?

Solução

O ICEfaces 2.0 ainda não está integrado ao MyFaces.Você experimentou seu aplicativo com os arquivos .jar Mojarra incluídos?

Outras dicas

Estou familiarizado apenas com o Icefaces 1.8, mas parece-me que seu botão de comando não está habilitado para Ajax.Além disso, você deve usar um actionListener em vez de uma ação

Você pode usar o botão de comando icefaces:

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

ou as tags JSF 2 ajax:

<h:commandButton id="startAjax" value="Start">
    <f:ajax listener="#{ajaxTest.addText}"/>
</h:commandButton>

Você tem alguma ferramenta de desenvolvimento que possa validar o código?Pelo menos na versão Vaadin do ICEPush você não poderia confiar em seus exemplos.Na demonstração oficial havia um código obsoleto e no chat eles deram o código onde as importações eram de outro planeta com os corretos.

Meu Eclipse disse que muitas importações estavam erradas e o código tinha marcas obsoletas em algumas funções.Esses caras se desenvolvem tão rápido que seus documentos ficam permanentemente desatualizados.Então, leia com atenção o que sua ferramenta diz sobre o código!

Também estou com problema de integração do IceFaces (para usar push) com o app que já usa Richfaces.Mas é possível integrar o IcePush diretamente com quase qualquer aplicação web java (com Servlet Api).Você pode ver mais detalhes em http://achorniy.wordpress.com/2012/02/29/icepush-integration-to-web-application/

A ideia é usar javascript-api (ou jQuery-api) fornecido pelo IcePush.Assim, sua página com javascript-api registra-se como ouvinte de notificações push e no retorno de chamada você pode chamar qualquer função javascript para atualizar sua página.No exemplo do Richfaces você pode usar ajaxUpdateFunction() que na verdade é apoiado por <a4j:jsFunction name="ajaxUpdateFunction" action="#{myBean.update} reRender="updatedComponent(s)" ajaxSingle="true"/> ou execute solicitação ajax com jQuery.No seu caso (JSF-2.0) acho que você pode ligar jsf.ajax.request(this, event, {render:'ajaxTestTable'}) para atualizar o que você deseja (exemplos http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/)

tudo o que você precisa fazer no lado do servidor é registrar o servlet IcePush e inicializar a conexão icePush no lado do cliente com a API javascript.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top