[Resolvido]Growls conflitando no Primefaces, mostra growl de outras ações

O que será que pode ser isso?

                <!--|=====================|-->
                <!--    DIALOG DE SENHA    -->
                <!--|=====================|-->
                <p:dialog header="Alterar Senha" widgetVar="alterarSenhaDialog" resizable="false" id="usrAlterarSenha"
                          showEffect="clip" hideEffect="clip" modal="true" width="320" height="120" style="text-align: center">
                    <p:growl id="mensagensAlteraSenha" autoUpdate="false"/>
                    <p:panelGrid columns="2" id="panelGridSenha">
                        <h:outputLabel value="Senha nova: *" />
                        <p:password id="pwd1" value="#{pessoaMB.senhaTemp}" validatorMessage="Os valores precisam ser iguais em ambos os campos." match="pwd2" label="Senha nova" required="true"/>  
                        <h:outputLabel value="Redigite: *" />  
                        <p:password id="pwd2" value="#{pessoaMB.senhaTemp}" validatorMessage="Os valores precisam ser iguais em ambos os campos." label="Redigite" required="true"/>
                    </p:panelGrid>
                    <p:commandButton update="mensagensAlteraSenha, panelGridSenha" actionListener="#{pessoaMB.colocaSenhaCriptografada}" value="Salvar" style="margin-top: 5px;" onclick="alterarSenhaDialog.hide();"/>
                </p:dialog>

                <!--|=====================|-->
                <!--    DIALOG DE EMAIL   -->
                <!--|=====================|-->
                <p:dialog header="Adicionar Email" widgetVar="adicionarEmailDialog" resizable="false" id="usrAdicionarEmail"
                          showEffect="clip" hideEffect="clip" modal="true" width="320" height="120" style="text-align: center">
                    <p:growl id="mensagensAdicionaEmail" autoUpdate="false"/>
                    <p:panelGrid columns="2" id="panelGridEmail" style="width: 100%;">
                        <h:outputLabel value="Email: " />
                        <p:inputText id="email" value="#{pessoaMB.emailTemp.enderecoDeEmail}" required="true" requiredMessage="O endereço do email é obrigatório!"
                                     validatorMessage="O email digitado não é válido!">
                            <f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]"/>
                        </p:inputText>
                    </p:panelGrid>
                    <p:commandButton update="mensagensAdicionaEmail, panelGridEmail" actionListener="#{pessoaMB.adicionaEmail}"  value="Adiciona email" style="margin-top: 5px;" onclick="adicionarEmailDialog.hide();"/>
                </p:dialog>

Quando clico no commandButton para confirmar e fechar o dialog de senha, em caso de erro, ele mostra além das mensagens de erro de senha uma mensagem de erro de email e vice-versa… O que pode ser isso?

Estou usando um form geral (tipo, tenho um form e dentro desse form exibo uma dataTable com algumas opções) e estava funcionando tudo, na realidade ainda está, só que quando resolvi colocar um growl por dialog ele resolveu misturar as mensagens, erá que tenho que criar um form por dialog???

Leia a parte de Targetable Messages neste post:

Olá digaoneves, já havia dado uma olhada nesse post antes, você acha que isso resolveria? (Bem, em tese resolveria mas ainda não testei)
Já vi no forum oficial um post onde o cara diz lá que o componente <p:growl> é compartilhado por toda a aplicação, tudo bem se for mas isso é uma puta sacanagem além de super chato pois nada do que o cara vê na documentação e nos exemplos é realmente usável, pra fazer pequenas bobagens tudo bem mas quando fazemos algo mais complexo e juntamos os componentes fica aquela salada de dúvidas. Onde é que tem dizendo isso na documentação? Nos exemplos dá a entender que é só fazer um form e colocar um growl por dialog…

O primefaces é maravilhoso mas tem hora que deixa o cara p da vida viu…

Relendo, pensando sobre o Targetable Messages e me auto-explicando(me ajudem pra ver se é o que eu entendi), quer dizer que nesse caso, como estou usando apenas um <h:form> geral e um <p:growl> por <p:dialog>, sabendo que vou ter vários dialogs, então isso significa que os vários growls vão estar contidos no mesmo form ao rodar a aplicação então eu tenho que direcionar pra que growl eu quero que a mensagem seja exibida, certo?

o growl na verdade vai mostrar qualquer FacesMessage que você adicionar…

agora se você quiser manter growls separados, e renderizar o que quiser na hora, pra deixar mais específico… não sei se funcionaria… não tenho certeza…
eu imagino alguns problemas.

mas se estiver usando o primefaces 3… não vejo porque não fazer como no post… não custa nada tentar heheh

Até agora nada, tentando de todas as formas abordadas aqui e nada…

Veja se não tem alguma coisa a ver com o globalOnly … testa ele com true e com false

Estou perdendo muito tempo no desenvolvimento por causa dessa besteiras, estressado e em certo ponto desapontado com o primefaces… :evil:

Sobre o globalOnly andii.brunetta já havia testado e quando seto pra true nenhuma mensagem mais aparece…

Aqui vai um print pra vocês entenderem…

Na imagem, executei um alterar senha sem passar nada justamente para que ele me mostrasse as mensagens de erro:

Essa última mensagem de email é correspondente a uma ação do dialog de adição de email e não de alterar senha, portanto não era pra ser mostrada aí…

ahhh sim!
então no commandButton que vc abre pra chamar esse dialog de alterar a senha coloca a propriedade imediate=“true”

Mesma coisa acontecendo andii.brunetta… Não entendi o porquê da propriedade imediate=“true” nesse caso… :frowning:

Primeira opção: O problema não é quando vc abre o dialog de Alterar senha? Pelo o que eu vi na imagem é isso… a menos que eu entendi errado…
mas a questão é que com o imediate=“true” ignoraria essas validações e abriria o dialog sem mostrar nada.

Segunda opção: O problema é quando vc clica no método de alterar a senha e ele valida tudo porque estão no mesmo form…

Se for a segunda opção: acredito que a solução seria separar os forms

O erro é correspondente a segunda opção andii.brunetta, justamente isso que você falou, estão compartilhando um único form, nesse form tem o dataTable que você vê na imagem, o dialog de edição (que é aberto ao clicar numa dessas opções), e o dialog de alterar senha (que é aberto ao clicar no botão alterar senha)… Vou tentar separar os forms (vai dar uma trabalheira danada) mas na documentação do prime os exemplos sempre mostram um form geral onde eu posso abrir várias coisas… (É isso que estou mais p da vida com o primefaces, a falta de exemplos (a maioria é exemplo bobo, quando a gente puxa pra isso aí não tem nada) e de documentação :evil: )

Vou tentar aqui e retorno…

Não sei se te ajuda, mas tenho alguns tutoriais sobre o primefaces no meu blog: Java sem café.!

Estou pra voltar a escrever coisas mais específicas, porque o que tem mais por enquanto é mostrando os componentes do prime 2.2.1 … vou voltar falando sobre o 3.0

Ah! O “Java sem café!” é seu? Antes de tudo meus parabéns, ótimo blog, já li todos os tutorias de primefaces nele, inclusive um dos únicos blogs com este tipo de material, muito bom mesmo. Foi de grande valia na minha transição para o primefaces com facelets. Muito obrigado! Estou pensando aqui em montar um artigo sobre “As dez coisas que o primefaces não te ensina” pra resolver justamente essas cascas de banana que a gente perde o maior tempão pensando que está desenvolvendo corretamente com ele… (Se for só pelos exemplos do prime o cara tá ferrado…)

Então… é meu sim, obrigada pelos elogios!
Olha… acho que tem mais de 10 coisas que o PrimeFaces não ensina viu rsrs eu só estou esperando terminar meu tcc da pós para voltar e escrever, mas voltar com soluções de problemas do dia a dia :slight_smile:

Oi andii.brunetta, só dando o meu retorno aqui… Deu certo realmente, em vez de um grande form compartilhado criei vários forms, um para cada função que eu desejo executar (um por dialog) e finalmente ele está separando as mensagens em seus respectivos growls. Mais uma vez muito obrigado e mais sucesso ainda para o blog. Valeu! :smiley:

Que bom que deu certo :wink: