Olá pessoal, tenho uma página em que as requisições ajax só funcionam na segunda vez que eu clico no commandLink, e não com um clique só como seria o certo.
Por exemplo:
//Minha página. Apaguei tudo e deixei só isso para teste, mas mesmo assim o commandLink só executa o método no bean na segunda vez que eu clico-->
<ui:composition template="./../../administrador/template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:sec="http://www.springframework.org/security/facelets/tags"
xmlns:f="http://java.sun.com/jsf/core">
<ui:define name="content">
<h:form id="form_cadastro_usuario" prependId="false">
<h:inputText id="txt_teste" value="#{managedBeanSecurity.telefone}"/>
<p:commandLink actionListener="#{managedBeanSecurity.teste}" process="@this txt_teste" value="Enviar" />
</h:form>
</ui:define>
</ui:composition>
//Meu bean
@ManagedBean
@SessionScoped
public class ManagedBeanSecurity implements Serializable {
//Outras variáveis e métodos
//Este método só é executado no segundo clique do commandLink
public void teste(ActionEvent e)
{
System.out.println("O método teste fo executado com êxito.");
System.out.println("O telefone submetido foi:" + this.getTelefone());
}
}
Alguém poderia me ajudar?
Minha plataforma: Netbeans 7.1.2, JSF 2.1, Primefaces 3.4.1 e JDK 1.7
Faz um teste, deixe apenas a parte do form na página com h:head e h:body. Veja se funciona.
Bom percebi que meu template já tem o <h:head> e o <h:body>, veja:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<h:outputStylesheet name="default.css" library="css" />
<h:outputStylesheet name="cssLayout.css" library="css" />
<h:outputScript library="js" name="jquery.maskMoney.js" />
<h:outputScript library="js" name="locale_primefaces.js" />
<f:loadBundle basename="properties.properties_pt_BR" var="i18n"/>
<script type="text/javascript">
jQuery(function(){
jQuery('input[id*=txt_precoCusto]').maskMoney({symbol:'R$ ', showSymbol:true, thousands:'.', decimal:',', symbolStay: true});
jQuery('input[id*=txt_margemLucro]').maskMoney({symbol:'R$ ', showSymbol:true, thousands:'.', decimal:',', symbolStay: true});
});
</script>
<title>Facelets Template</title>
</h:head>
<h:body style="font-size: 10px !important">
<noscript>
O JavaScript do seu Browse deve ser habilitado para melhor visualização desta Página.
</noscript>
<div id="tudo">
<div id="menu_login">
<ui:insert name="menu_login"/>
</div>
<div id="menu_principal">
<ui:insert name="menu_principal"/>
</div>
<div id="area_localizacao">
<ui:insert name="area_localizacao"/>
</div>
<div id="conteudo">
<div id="left">
<ui:insert name="left">Left</ui:insert>
</div>
<div>
<div id="right">
<ui:insert name="right">Right</ui:insert>
</div>
<div id="content" class="right_content">
//insert do meu form
<ui:insert name="content">Content</ui:insert>
</div>
</div>
<div id="bottom">
<ui:insert name="bottom">Bottom</ui:insert>
</div>
</div>
</div>
</h:body>
</html>
Pois é, e não está funcionando. :lol: :lol: :lol:
Por gentileza, poderia deixar uma página apenas com head, body, form e os componentes necessários?
Bom fiz assim:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition template="./../../administrador/template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<ui:define name="menu_login">
</ui:define>
<ui:define name="menu_principal">
</ui:define>
<ui:define name="area_localizacao">
</ui:define>
<ui:define name="left">
</ui:define>
<ui:define name="right">
</ui:define>
<ui:define name="content">
<h:head>
</h:head>
<h:body>
<h:form id="form_cadastro_usuario" prependId="false">
<h:inputText id="txt_teste" value="#{managedBeanSecurity.telefone}"/>
<p:commandLink actionListener="#{managedBeanSecurity.teste}" process="@this txt_teste" value="Enviar" />
</h:form>
</h:body>
</ui:define>
<ui:define name="bottom">
<!---->
</ui:define>
</ui:composition>
Porém ainda não funcionou. O que será que esta errado?
cara, arranca fora esses trem de composition!
Testa com uma página seca tudo na mão. -_-’’
Hebert para ser mais especifico, eis minha pagina inteira:
Na realidade esta página funciona perfeitamente, exceto dois componentes. O selectonemenu estado, quando escolhido o estado o valor muda mas depois volta rapidamente ao valor anterior. Na segunda vez, aí sim ele fica normal.
E o meu commandlink telefone também funciona porém só na segunda vez que eu clico. Acho que deve ser algo no ciclo de vida.
<ui:define name="content">
<h:form id="form_cadastro_usuario" prependId="false">
<font size="2">
<p:growl globalOnly="true" id="growl" sticky="true" showDetail="true"/>
<p:messages globalOnly="true"/>
<h:panelGrid columns="1">
<p:fieldset legend="#{i18n['header.dados.usuario']}">
<h:panelGrid id="pg_usuarios" columns="3">
<p:outputLabel styleClass="label_habilitado" id="label_som_tipo_usuario" for="som_role" value="#{i18n['tipo.usuario']}" />
<p:selectOneMenu styleClass="input" required="true" id="som_role" requiredMessage="#{i18n['campo.obrigatorio']}" value="#{managedBeanSecurity.usuario.roles}" converter="objectConverter" >
<f:selectItems value="#{managedBeanSecurity.roles}" var="r" itemLabel="#{r.nomeRole}" itemValue="#{r}"/>
</p:selectOneMenu>
<p:message id="msg_som_usuario" for="som_role"/>
<p:outputLabel styleClass="label_habilitado" id="label_txt_username" for="txt_username" value="#{i18n['usuario']}" />
<p:inputText styleClass="input" validator="usuarioValidator" required="true" requiredMessage="#{i18n['campo.obrigatorio']}" id="txt_username" label="#{i18n['label.nome']}"
value="#{managedBeanSecurity.usuario.username}">
<f:validator validatorId="usuarioValidator"/>
<p:ajax event="blur" update=":form_cadastro_usuario:txt_username :form_cadastro_usuario:msg_txt_username :form_cadastro_usuario:label_txt_username" />
</p:inputText>
<p:message id="msg_txt_username" for="txt_username" />
<p:outputLabel styleClass="label_habilitado" id="label_txt_password" for="txt_password" value="#{i18n['password']}" />
<p:password styleClass="input" redisplay="true" promptLabel="#{i18n['coloque.senha']}" weakLabel="#{i18n['senha.fraca']}" strongLabel="#{i18n['senha.otima']}" goodLabel="#{i18n['senha.boa']}" feedback="true" required="true" requiredMessage="#{i18n['campo.obrigatorio']}" id="txt_password" label="#{i18n['label.password']}"
value="#{managedBeanSecurity.usuario.password}" >
<p:ajax event="blur" update=":form_cadastro_usuario:txt_password :form_cadastro_usuario:msg_txt_password :form_cadastro_usuario:label_txt_password" />
</p:password>
<p:message id="msg_txt_password" for="txt_password" />
<p:outputLabel styleClass="label_habilitado" id="label_txt_reenter_password" for="txt_reenter_password" value="#{i18n['reenter.password']}" />
<p:password styleClass="input" redisplay="true" validatorMessage="#{i18n['validator.confirm.password']}" validator="#{managedBeanSecurity.reenterPasswordValidator}" promptLabel="#{i18n['coloque.senha']}" weakLabel="#{i18n['senha.fraca']}" strongLabel="#{i18n['senha.otima']}" goodLabel="#{i18n['senha.boa']}" feedback="true" required="true" requiredMessage="#{i18n['campo.obrigatorio']}" id="txt_reenter_password"
value="#{managedBeanSecurity.usuario.reenterPassword}" >
<p:ajax event="blur" update=":form_cadastro_usuario:txt_reenter_password :form_cadastro_usuario:msg_txt_reenter_password :form_cadastro_usuario:label_txt_reenter_password" />
</p:password>
<p:message id="msg_txt_reenter_password" for="txt_reenter_password" />
</h:panelGrid>
</p:fieldset>
<p:fieldset legend="#{i18n['dados.pessoais']}">
<h:panelGrid columns="3">
<p:outputLabel styleClass="label_habilitado" id="label_txt_nome" for="txt_nome" value="#{i18n['nome']}" />
<p:inputText styleClass="input" size="40" id="txt_nome" required="true" requiredMessage="#{i18n['campo.obrigatorio']}" value="#{managedBeanSecurity.usuario.clientes.nome}" >
<p:ajax event="blur" update=":form_cadastro_usuario:txt_nome :form_cadastro_usuario:msg_txt_nome :form_cadastro_usuario:label_txt_nome" />
</p:inputText>
<p:message id="msg_txt_nome" for="txt_nome" />
<p:outputLabel styleClass="label_habilitado" id="label_txt_data_nascimento" for="txt_data_nascimento" value="#{i18n['nascimento']}" />
<p:calendar styleClass="input" pages="2" size="10" requiredMessage="#{i18n['campo.obrigatorio']}" maxdate="#{managedBeanSecurity.limite_inicial}" mindate="#{managedBeanSecurity.limite_anterior}" locale="pt_BR" pattern="dd/MM/yyyy" required="true" id="txt_data_nascimento" value="#{managedBeanSecurity.usuario.clientes.dataNascimento}" >
<p:ajax event="dateSelect" update=":form_cadastro_usuario:txt_data_nascimento :form_cadastro_usuario:msg_txt_data_nascimento :form_cadastro_usuario:label_txt_data_nascimento" />
</p:calendar>
<p:message id="msg_txt_data_nascimento" for="txt_data_nascimento" />
</h:panelGrid>
</p:fieldset>
<p:fieldset legend="#{i18n['documentacao']}">
<h:panelGrid columns="3">
<p:outputLabel styleClass="label_habilitado" id="label_txt_rg" for="txt_rg" value="#{i18n['rg']}" />
<p:inputText styleClass="input" value="#{managedBeanSecurity.usuario.clientes.rg}" required="true" requiredMessage="#{i18n['campo.obrigatorio']}" id="txt_rg" >
<p:ajax event="blur" update=":form_cadastro_usuario:label_txt_rg :form_cadastro_usuario:msg_txt_rg :form_cadastro_usuario:txt_rg" />
</p:inputText>
<p:message id="msg_txt_rg" for="txt_rg"/>
<p:outputLabel styleClass="label_habilitado" id="label_txt_cpf" for="txt_cpf" value="#{i18n['cpf']}" />
<p:inputMask styleClass="input" mask="999.999.999-99" value="#{managedBeanSecurity.usuario.clientes.cpf}" required="true" requiredMessage="#{i18n['campo.obrigatorio']}" id="txt_cpf">
<f:validator validatorId="cpfValidatorExists"/>
<f:validator validatorId="cpfValidatorValid"/>
<p:ajax event="blur" update=":form_cadastro_usuario:label_txt_cpf :form_cadastro_usuario:msg_txt_cpf :form_cadastro_usuario:txt_cpf" />
</p:inputMask>
<p:message id="msg_txt_cpf" for="txt_cpf"/>
</h:panelGrid>
</p:fieldset>
<p:fieldset id="fs_dados_postais" legend="#{i18n['dados.postais']}">
<h:panelGrid columns="3">
<p:outputLabel styleClass="label_habilitado" for="txt_cep" id="label_txt_cep" value="#{i18n['cep']}" />
<p:inputMask styleClass="input" mask="99.999-999" value="#{managedBeanSecurity.usuario.clientes.cep}" id="txt_cep" required="true" requiredMessage="#{i18n['campo.obrigatorio']}" >
<p:ajax event="blur" update=":form_cadastro_usuario:fs_dados_postais" listener="#{managedBeanSecurity.buscaEnderecoPorCep}" />
</p:inputMask>
<p:message id="msg_txt_cep" for="txt_cep" />
<p:outputLabel styleClass="label_habilitado" id="label_som_estado" for="som_estado" value="#{i18n['estado']}" />
<p:selectOneMenu styleClass="input" value="#{managedBeanSecurity.usuario.clientes.cidades.estados}" converter="estadoConverter" valueChangeListener="#{managedBeanSecurity.carregaCidades}" id="som_estado" >
<f:selectItems value="#{managedBeanSecurity.estados}" var="e" itemLabel="#{e.estado}" itemValue="#{e}"/>
<p:ajax event="change" update=":form_cadastro_usuario:som_cidade :form_cadastro_usuario:label_som_estado :form_cadastro_usuario:msg_som_estado :form_cadastro_usuario:som_estado "/>
</p:selectOneMenu>
<p:message id="msg_som_estado" for="som_estado"/>
<p:outputLabel styleClass="label_habilitado" id="label_som_cidade" for="som_cidade" value="#{i18n['cidade']}" />
<p:selectOneMenu styleClass="input" valueChangeListener="#{managedBeanSecurity.carregaBairros}" converter="cidadeConverter" value="#{managedBeanSecurity.usuario.clientes.cidades}" required="true" requiredMessage="#{i18n['campo.obrigatorio']}" id="som_cidade" >
<f:selectItems value="#{managedBeanSecurity.cidades}" var="c" itemLabel="#{c.cidade}" itemValue="#{c}"/>
<p:ajax event="change" update=":form_cadastro_usuario:label_som_cidade :form_cadastro_usuario:msg_som_cidade :form_cadastro_usuario:som_cidade" />
</p:selectOneMenu>
<p:message id="msg_som_cidade" for="som_cidade"/>
<p:outputLabel styleClass="label_habilitado" for="ac_bairro" id="label_ac_bairro" value="#{i18n['bairro']}" />
<p:autoComplete styleClass="input" itemLabel="#{bairro}" itemValue="#{bairro.bairro}" var="bairro" value="#{managedBeanSecurity.usuario.clientes.bairro}" completeMethod="#{managedBeanSecurity.suggestionsBairros}" required="true" requiredMessage="#{i18n['campo.obrigatorio']}" id="ac_bairro">
<p:ajax event="itemSelect" listener="#{managedBeanSecurity.carregaLogradouros}" process="ac_bairro" update=":form_cadastro_usuario:label_ac_bairro :form_cadastro_usuario:msg_ac_bairro :form_cadastro_usuario:ac_bairro :form_cadastro_usuario:ac_logradouro"/>
</p:autoComplete>
<p:message id="msg_ac_bairro" for="ac_bairro"/>
<p:outputLabel styleClass="label_habilitado" for="ac_logradouro" id="label_ac_logradouro" value="#{i18n['logradouro']}" />
<p:autoComplete styleClass="input" size="40" itemLabel="#{logradouro}" itemValue="#{logradouro.logradouro}" var="logradouro" value="#{managedBeanSecurity.usuario.clientes.logradouro}" completeMethod="#{managedBeanSecurity.suggestionsLogradouros}" required="true" requiredMessage="#{i18n['campo.obrigatorio']}" id="ac_logradouro">
<p:ajax event="itemSelect" update=":form_cadastro_usuario:label_ac_logradouro :form_cadastro_usuario:msg_ac_logradouro :form_cadastro_usuario:ac_logradouro" />
</p:autoComplete>
<p:message id="msg_ac_logradouro" for="ac_logradouro"/>
<p:outputLabel styleClass="label_habilitado" for="txt_numero_logradouro" id="label_txt_numero_logradouro" value="#{i18n['numero']}" />
<p:spinner styleClass="input" id="txt_numero_logradouro" value="#{managedBeanSecurity.usuario.clientes.numeroLogradouro}" required="true" requiredMessage="#{i18n['campo.obrigatorio']}" >
<p:ajax event="change" update=":form_cadastro_usuario:label_txt_numero_logradouro :form_cadastro_usuario:msg_txt_numero_logradouro :form_cadastro_usuario:txt_numero_logradouro" />
</p:spinner>
<p:message id="msg_txt_numero_logradouro" for="txt_numero_logradouro" />
<p:outputLabel styleClass="label_habilitado" id="label_txt_email" for="txt_email" value="#{i18n['email']}" />
<p:inputText styleClass="input" validatorMessage="#{i18n['validator.email']}" size="20" value="#{managedBeanSecurity.usuario.clientes.EMail}" id="txt_email">
<f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]"/>
<p:ajax event="blur" update=":form_cadastro_usuario:label_txt_email :form_cadastro_usuario:msg_txt_email :form_cadastro_usuario:txt_email" />
</p:inputText>
<p:message id="msg_txt_email" for="txt_email"/>
<p:outputLabel styleClass="label_habilitado" id="label_ck_enabled" for="ck_enabled" value="Habilitar"/>
<p:selectBooleanCheckbox styleClass="input" id="ck_enabled" value="#{managedBeanSecurity.usuario.enabled}">
<p:ajax event="change"/>
</p:selectBooleanCheckbox>
<p:message id="msg_ck_enabled" for="ck_enabled"/>
</h:panelGrid>
//Coloquei para teste e não funciona
<h:inputText id="txt_teste" value="#{managedBeanSecurity.telefone}"/>
<p:commandLink actionListener="#{managedBeanSecurity.teste}" process="@this txt_teste" value="Enviar" />
<p:outputPanel id="op_tabela_telefones_cliente">
</p:outputPanel>
</p:fieldset>
<h:panelGrid columns="3">
<p:commandLink id="btn_clear_cliente" actionListener="#{managedBeanSecurity.apagarUsuario}">
<p:graphicImage url="/resources/img/icones/clear_48.png" height="48px" width="48px" />
</p:commandLink>
<p:commandLink id="btn_incluir_cliente" onclick="wv_dlg_incluir_usuario.show();">
<p:graphicImage url="/resources/img/icones/save_48.png" height="48px" width="48px" />
</p:commandLink>
<p:commandLink id="btn_gerenciar_usuarios" immediate="true" ajax="false" process="@form" action="/paginas/funcionario/usuario/gerenciar?faces-redirect=true" >
<p:graphicImage url="/resources/img/icones/managed_users_48.png" height="48px" width="48px" />
</p:commandLink>
</h:panelGrid>
</h:panelGrid>
</font>
<p:dialog header="#{i18n['header.inclusao.usuario']}" modal="true" id="dlg_inclusao_usuario" closable="true"
widgetVar="wv_dlg_incluir_usuario">
<center>
<h:panelGrid columns="2" >
<p:graphicImage url="/resources/img/icones/question_64.png"/>
<h:outputText value="#{i18n['confirmar.inclusao']}"/>
</h:panelGrid>
<h:panelGrid columns="2" >
<p:commandButton process="@this" actionListener="#{managedBeanSecurity.incluirCliente}" value="#{i18n['incluir']}"
onclick="wv_dlg_incluir_usuario.hide();" >
</p:commandButton>
<p:commandButton id="btn_cancelar_usuario" value="#{i18n['cancelar']}" onclick="wv_dlg_incluir_usuario.hide();" type="button" />
</h:panelGrid>
</center>
</p:dialog>
<p:dialog modal="modal" header="#{i18n['header.exclusao.telefones.usuario']}" id="dlg_exclusao_telefones_usuario" closable="true"
widgetVar="wv_dlg_exclusao_telefones_usuario">
<center>
<h:panelGrid columns="2" >
<p:graphicImage url="/resources/img/icones/question_64.png"/>
<h:outputText value="#{i18n['confirmar.exclusao']}"/>
</h:panelGrid>
<h:panelGrid columns="2" >
<p:commandButton onclick="wv_dlg_exclusao_telefones_usuario.hide();" process="@this" actionListener="#{managedBeanSecurity.excluirTelefonesCliente}" value="#{i18n['excluir']}"
update=":form_cadastro_usuario:op_tabela_telefones_cliente">
</p:commandButton>
<p:commandButton value="#{i18n['cancelar']}" onclick="wv_dlg_exclusao_telefones_usuario.hide();" type="button" />
</h:panelGrid>
</center>
</p:dialog>
<p:ajaxStatus style="position:fixed;right:5px;top:5px">
<f:facet name="start">
<p:panel style="width: 250px;">
<h:panelGrid columns="1">
<h:outputText styleClass="label_habilitado" value="Processando sua requisição"/>
<p:graphicImage value="/resources/img/icones/ajax_loader_barra.gif"/>
</h:panelGrid>
</p:panel>
</f:facet>
<f:facet name="complete">
<h:outputText value="" />
</f:facet>
</p:ajaxStatus>
</h:form>
</ui:define>
Será que há alguma outra solução?
Não duplique o post
http://www.guj.com.br/java/289549-requisicao-ajax-so-executa-na-segunda-vez
Na versão original tente retirar o
process="@this txt_teste"
Bom dia,
Estava hoje com o mesmo problema e após muito esforço e pesquisa consegui resolver esse problema, fiz da seguinte forma
- usei um <h:commandButton
- to type submit
- retirei todos os forms que estava em volta
<h:column>
<f:facet name=“header”>
<h:outputText value="#{msg[‘acesso.geral.editar’]}" />
</f:facet>
<h:commandButton type=“submit” value="#{msg[‘acesso.geral.editar’]}">
<f:setPropertyActionListener target="#{setorMB.setorSel}" value="#{v}"/>
<f:ajax event=“click” listener="#{setorMB.alterar}"/>
</h:commandButton>
</h:column>
<h:column>
<f:facet name=“header”>
<h:outputText value="#{msg[‘acesso.geral.excluir’]}" />
</f:facet>
<h:commandButton type=“submit” value="#{msg[‘acesso.geral.excluir’]}" >
<f:setPropertyActionListener target="#{setorMB.setorSel}" value="#{v}"/>
<f:ajax event=“click” listener="#{setorMB.excluir}" />
</h:commandButton>
</h:column>