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