Problema ciclo de vida ajax com primefaces

Estou com o seguinte problema em uma aplicação utilizando o primefaces…

Tenho vários componentes que utilizam da tag <p:ajax> e outros commandobuttons e commandlinks que também fazem requisição ajax…

Acontece que quando eu vou inserir um componente novo que também deverá fazer uma requisição ajax, essa requisição não é disparada quando solicitada. Ela é disparada somente se uma outra requisição for feita por outros componentes…

Alguém já teve esse problema e sabe como resolver… já estou perdendo o juízo por conta disto…

obrigado…

Não entendi.

Você está querendo dizer que tem um h:commandButton para disparar a ação e quer que ao adicionar outro button, por exemplo, ele tb utilize ajax?

Não cara… vou explicar melhor…

Eu já tenho vários componentes que fazem requisições ajax e preciso adicionar mais componentes que fazem requisições ajax também…

Imagine o seguinte cenário…

O código abaixo tem dois commandButtons.

O primeiro quando clicado chama o método 1 do meuBean e imprime “Executando o método 1”;

O segundo quando clicado chama o método 2 do meuBean e imprime “Executando o método 2”;


<p:commandButton update=":form,:algum_componente" actionListner="#{meuBean.método1}" value="Requisição 1"></p:commandoButton>

<p:commandButton update=":form,:algum_componente" actionListner="#{meuBean.método2}" value="Requisição 2"></p:commandoButton>

Até ai está tudo certo.

O problema começa quando eu adiciono um novo componente, por exemplo um terceiro commandButton. Pois ao clicar no terceiro commandButton deveria imprimir “Executando o método 3” quando na verdade não imprime nada…

Porém ao clicar no commandButton 3 e depois clicar em outro commando button, por exemplo o commandbutton 1 , a aplicação imprime -> “Executando o método 1 , Executando o método 3”…


<p:commandButton update=":form,:algum_componente" actionListner="#{meuBean.método3}" value="Requisição 3"></p:commandoButton>

Acredito que engine do primefaces está se perdendo com as requisições ou eu não estou sabendo se há alguma configuração para acertar isto…

não sei se é engine do primefaces uma vez que ele utiliza o Mojara para controle disso.

  1. no JSF comum você separa por espaço em branco e não vírgulas. Tente alterar e tente isso.
  2. tente colocar immediate=true no seus botões e veja se vai.

Funfo não camarada…

mas de qualquer forma vlw pela ajuda ai…

Tem algo muito curioso neste problema…

Veja, se eu coloco o meu commandoButton 3 para executar o método do commandButton 2 ou 1 ele executa sem problemas…

Outras vezes ao trocar o nome do método funcionou… (Por isso minha desconfiança em ser bug no primefaces)

amigo poste o codigo todo da sua pagina, voce esta rodando em qual browser?
e onde esta a tag :pajax

pode está acontecendo que o botão está renderizando o componente com o novo botão, experimenta coloca 1 outputpanel fora do componente que vc quer renderizar e manda o botao novo renderiza esse outputpanel…


<h:column>                        
                        <div style="width:100%; text-align:right">
                            <p:inputText styleClass="pedido_fields_currency" value="#{dtPessoaFaces.estoque.quantidade}">
                                <f:convertNumber maxFractionDigits="3" minFractionDigits="2"/>
                                <p:ajax  update=":form1:dt_products,:formd:edit_total" event="blur" listener="#{dtPessoaFaces.recalcular()}"></p:ajax>
                            </p:inputText>
                        </div>
</h:column>


<p:inputText id="edit_unitario" styleClass="pedido_fields_currency" value="#{dtPessoaFaces.estoque.unitario}">
                                <f:convertNumber maxFractionDigits="3" minFractionDigits="2"/>
                                <p:ajax  update=":form1:dt_products,:formd:edit_total,:formd:edit_desconto" event="blur" listener="#{dtPessoaFaces.recalcularByUnitarioEdit()}"></p:ajax>
</p:inputText>

Ai estão algumas partes que eu uso o p:ajax, é impossível postar o código todo pois é imenso…

Eu estou usando o chrome e o firefox como navegador…

Já atualizei a versão do primefaces pra m4 e mesmo assim não funfa

sua pagina esta assim

<f:view contentType="text/html">
<h:head>
</h:head>

<h:body>
</h:body>
</f:view>

Repare a tag f:view antes do head

e ao invés de head é h:head
e ao invés de body é h:body

Eu estou usando um template, vou postar…

TEMPLATE


<?xml version='1.0' encoding='ISO-8859-1' ?>

<!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:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets" 
      xmlns:f="http://java.sun.com/jsf/core">

    <ui:composition template="template.xhtml">            

        <ui:define name="navigationBar">
            <h:form>            
                #{loginFaces.loadEmpresaId()}
            </h:form>            
        </ui:define>        

        <ui:define name="content">                

            <h:form> 

                <div id="form_login">
                    <h:panelGrid border="0">

                        <h:column>
                            <h:outputText value="Login:"></h:outputText>
                            <p:inputText value="#{loginFaces.login}"></p:inputText>
                        </h:column>

                        <h:column>
                            <h:outputText value="Senha:"></h:outputText>
                            <p:password feedback="false" value="#{loginFaces.senha}"></p:password>
                        </h:column>

                        <h:column>

                            <h:outputText value="Eu sou: "></h:outputText> 
                            <p:selectOneMenu value="#{loginFaces.selectedTypeOfUsers}" var="p">
                                <f:selectItems value="#{loginFaces.listOfUserTypes}"></f:selectItems>                        
                                <f:converter converterId="TypeOfUsersConverter"></f:converter>
                                <p:column>
                                    #{p.description}
                                </p:column>
                                <p:column>
                                    <p:graphicImage url="/resources/img/#{p.pathOfImg}"></p:graphicImage>
                                </p:column>
                            </p:selectOneMenu>                                                                                    

                        </h:column>                                                                                                
                    </h:panelGrid> 

                    <div style="position: relative; left: 70px; top: 10px">
                        <p:commandLink ajax="false" action="#{loginFaces.doLogin}">                            
                            <p:graphicImage url="/resources/img/botao_entrar.png"></p:graphicImage>
                        </p:commandLink>                                                                             
                    </div>
                </div>                
            </h:form>            
        </ui:define>        
    </ui:composition>

</html>

ALGUMA OUTRA PÁGINA


<?xml version='1.0' encoding='ISO-8859-1' ?>

<!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:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets" 
      xmlns:f="http://java.sun.com/jsf/core">

    <ui:composition template="/template.xhtml">            

        <ui:define name="navigationBar">
            <h:form>            
                MENU
            </h:form>            
        </ui:define>        

        <ui:define name="content">                
           CONTEÚDO   
        </ui:define>        
    </ui:composition>

</html>

é correto fazer assim?

Galera… deu certo agora, realmente eu não sei qual é o problema e nem qual a solução… fiz o que o tiago falou e deu certo… Entretanto o meu System.out.print() continua imprimindo só depois que é acionado algum componente depois do que eu quero que realmente seja executado…

vlw todo mundo ai…