Atualização da página indesejada

Olá Pessoal, boa tarde!

Tenho uma aplicação (um chat) em JSF com Primefaces, a idéia é mostrar uma lista de usuários e, quando clicarmos em determinado usuário
dessa lista, abrimos uma janela (ao estilo Facebook).

Para abrir a janela, pego um modelo e crio ela em tempo de execução, usando javascript, assim,
quando o usuário clica no botão para enviar a mensagem pego o ID do form gerado e dou um submit
nele.

O problema é quando eu dou um submit nesse meu form, ele manda os dados para o bean só que
atualiza minha página…

Alguém saberia uma forma de evitar essa atualização, expondo os dados na minha tela e jogando para o bean?

Obrigado.

ajax ?

Então… eu tentei usar Jquery com ajax, mas ele sempre cai no status de erro, após dar o refresh da página

 $(form).submit(function()
        {
            var data = jQuery(this).serialize(); // Dados do formulário	

            // Envia o formulário via Ajax
            jQuery.ajax({
                type: "POST",
                url: this.action,
                data: data,
                cache: false,
                success: alert('Deu certo'),
                error:function(XMLHttpRequest, textStatus, errorThrown)
                {
                    alert("Deu erro");
                }
            });
            return false; // Previne o form de ser enviado pela forma normal
        });

Qual versão do jsf está usando ?

O jsf 2 tem ajax nativo.

O JSF 2 mesmo, mas eu “crio” esse form no meu javascript, ele só existe em execução…ainda assim seria possível usar o ajax nativo do JSF? Como eu introduziria
isso nesse form?

Ele não é um h:form.

Aí eu acho que não.

Porque você criou um form com javascript ?

Cara, estou com este mesmo problema, porém começou a acontecer após a versão 19 do Firefox que atualizou essa semana.

O problema acontece porque você provavelmente usa “onclick=” no <p:commandButton />, se tirar o “onclick” ele não atualiza a página e manda o actionListner pro Bean belezinha.

Estou apanhando aqui o dia todo com isso, a solução por enquanto foi voltar para o Firefox 18.

Segue meu código fonte, o botão que me refiro é o “Start” abaixo:

<div xmlns="http://www.w3.org/1999/xhtml"
     xmlns:h="http://java.sun.com/jsf/html"
     xmlns:f="http://java.sun.com/jsf/core"
     xmlns:p="http://primefaces.org/ui" >
    <p:panel >
        <h2>Pagina de mineração de Outros Dados.</h2>
        <br />
        <h:form id="formMinerOther" prependId="false">
            <p:growl globalOnly="true" id="messages" />

            <p:panel id="panelMinerOther">
                <h:outputLabel for="repositoryToMiner" value="Escolha o Repositório para mineração dos dados: "/>

                <p:selectOneListbox id="repositoryToMiner"  style="height:100px;width:300px" value="#{gitMinerOthersBean.repositoryToMinerId}" >
                    <f:selectItems value="#{gitMinerRepositoryBean.repositoriesPrimaryMiner}" var="repo" itemLabel="#{repo.name}, #{repo.owner.login}" itemDescription="#{repo.name}" itemValue="#{repo.id}" />
                </p:selectOneListbox>
                <br />
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerOpenIssues}" id="minerOpenIssues" title="Minerar Open Issues" />
                <h:outputLabel for="minerOpenIssues" value="Minerar Open Issues."/>
                <br />       
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerClosedIssues}" id="minerClosedIssues" title="Minerar Closed Issues" />
                <h:outputLabel for="minerClosedIssues" value="Minerar Closed Issues."/>
                <br />  
                <p:spacer width="15" height="0" />
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerCommentsOfIssues}" id="minerCommentsOfIssues" title="Minerar Comments of Issues" />
                <h:outputLabel for="minerCommentsOfIssues" value="Minerar Comments of Issues."/>
                <br />    
                <p:spacer width="15" height="0" />
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerEventsOfIssues}" id="minerEventsOfIssues" title="Minerar Events of Issues" />
                <h:outputLabel for="minerEventsOfIssues" value="Minerar Events of Issues."/>
                <br />       
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerRepositoryCommits}" id="minerRepositoryCommits" title="Minerar Repository Commits" />
                <h:outputLabel for="minerRepositoryCommits" value="Minerar Repository Commits."/>
                <br />
                <p:spacer width="15" height="0" />
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerCommentsOfRepositoryCommits}" id="minerCommentsOfRepositoryCommits" title="Minerar Comments of Repository Commits" />
                <h:outputLabel for="minerCommentsOfRepositoryCommits" value="Minerar Comments of Repository Commits."/>
                <br />
                <p:spacer width="15" height="0" />
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerStatsAndFilesOfCommits}" id="minerStatsAndFilesOfCommits" title="Minerar Files and Stats of Repository Commits" />
                <h:outputLabel for="minerStatsAndFilesOfCommits" value="Minerar Files and Stats of Repository Commits."/>
                <br />       
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerOpenPullRequests}" id="minerOpenPullRequests" title="Minerar Open Pull Requests" />
                <h:outputLabel for="minerOpenPullRequests" value="Minerar Open Pull Requests."/>
                <br />       
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerClosedPullRequests}" id="minerClosedPullRequests" title="Minerar Closed Pull Requests" />
                <h:outputLabel for="minerClosedPullRequests" value="Minerar Closed Pull Requests."/>
                <br />    
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerOpenMilestones}" id="minerOpenMilestones" title="Minerar Open Milestones" />
                <h:outputLabel for="minerOpenMilestones" value="Minerar Open Milestones."/>
                <br />       
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerClosedMilestones}" id="minerClosedMilestones" title="Minerar Closed Milestones" />
                <h:outputLabel for="minerClosedMilestones" value="Minerar Closed Milestones."/>
                <br />  
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerCollaborators}" id="minerCollaborators" title="Minerar Collaborators" />
                <h:outputLabel for="minerCollaborators" value="Minerar Collaborators."/>
                <br />       
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerWatchers}" id="minerWatchers" title="Minerar Watchers" />
                <h:outputLabel for="minerWatchers" value="Minerar Watchers."/>
                <br />       
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerForks}" id="minerForks" title="Minerar Forks" />
                <h:outputLabel for="minerForks" value="Minerar Forks."/>
                <br />
                <h:selectBooleanCheckbox value="#{gitMinerOthersBean.minerTeams}" id="minerTeams" title="Minerar Teams" />
                <h:outputLabel for="minerTeams" value="Minerar Teams."/>
            </p:panel>
            <br />
            <br />

            <p:commandButton widgetVar="startButton" type="submit" actionListener="#{gitMinerOthersBean.start()}" value="Start" disabled="#{gitMinerOthersBean.initialized}"
                             onclick="startButton.disable();progress.start();subProgress.start();" update="loadingImage,logTextArea" />

            <p:commandButton value="Cancel" actionListener="#{gitMinerOthersBean.cancel()}" oncomplete="startButton.enable();progress.cancel();subProgress.start();" />

            <br />
            <br />

            <p:progressBar id="progress" widgetVar="progress" ajax="true" value="#{gitMinerOthersBean.progress}" labelTemplate="{value}%" styleClass="animated" interval="3000" >
                <p:ajax event="complete" listener="#{gitMinerOthersBean.onComplete()}" update="messages,loadingImage,logTextArea" oncomplete="startButton.enable();"/>
            </p:progressBar>
            <br />
            <p:progressBar id="subProgress" widgetVar="subProgress" ajax="true" value="#{gitMinerOthersBean.subProgress}" labelTemplate="{value}%" styleClass="animated" interval="3000" >  
            </p:progressBar>

            <br />
            <div style="margin: auto;text-align: center">
                <p:outputPanel  id="loadingImage"  >
                    <p:graphicImage alt="Loading..." width="50" url="resources/images/loading.gif" rendered="#{gitMinerOthersBean.initialized}" />  
                </p:outputPanel>
            </div>
            <br />

            <p:poll id="textAreaUpdater" widgetVar="textAreaUpdater" async="true" interval="4" update="logTextArea,loadingImage" autoStart="#{gitMinerOthersBean.initialized}" />

            <h3>Log de mineração:</h3>
            <br />
            <p:commandButton value="Refresh Log" ajax="true" async="true" update="logTextArea,loadingImage" />
            <br />
            <p:inputTextarea value="#{gitMinerOthersBean.log}" id="logTextArea" style="width: 100%" rows="30" autoResize="autoResize" readonly="true" />

        </h:form>
    </p:panel>
</div>

Abraços
Douglas Junior

Então, eu tenho uma janela “modelo” vazia.

Eu clono ela por javascript e, dependendo do usuário selecionado, identifico ela.

o h:form em tempo de execução é transformado em um form comum, eu pego esse form comum
e submeto ele por javascript.

Quando tento submeter esse meu form gerado por um commandButton clonado de forma similar ao form,
e que está dentro do form, ele age como se submetesse o meu form “modelo”, que está vazio, por isso
só consegui mandar os dados do form clone ao bean pelo javascript.

Não sei ao certo como modificar o meu commandButton para que ele atenda ao form clonado e não
ao form de origem…

A intenção é fazer um chat multi-janela, será que é possível fazer isso de uma forma mais prática?

Obrigado

Olá Pessoal

Estou revivendo o tópico para esclarecer como resolvido o problema na época.

Eu estava “passeando” pelo GUJ e vi que esse assunto tinha ficado pendente.

Meu problema era que eu estava usando o mesmo valor para o atributo “widgetVar” e para o atributo “id”. Foi só colocar um valor diferentes nos “id” e nos “widgetVar” que ficou tudo certo.

Exemplo do erro:

Como ficou:

Até a versão 18 do Firefox isso não era um problema, depois da atualização começou a ocorreu o impasse que citei na mensagem anterior.

Abraço a todos.
Douglas Junior