Página não comunica com bean

7 respostas Resolvido
jsf
Fefo80

Pessoal, preciso de uma ajuda. Tenho um método no .xhtml de um botão que deveria chamar um método no bean.

A coisa é simples assim:

XHTML

<ui:composition
     xmlns="http://www.w3.org/1999/xhtml"
     xmlns:f="http://java.sun.com/jsf/core"
     xmlns:h="http://java.sun.com/jsf/html"
     xmlns:p="http://primefaces.org/ui"
     xmlns:ui="http://java.sun.com/jsf/facelets"
     xmlns:sec="http://www.springframework.org/security/tags">
 
 <h:form id="frmSave">
 
 <h:commandButton
     id="testeMensagem"
     value="Teste mensagens"
     styleClass="submitform"  
     actionListener="#{meuBean.testeMensagem}"
 />
 
 (...)

BEAN

(...)
 
public void testeMensagem() {
    addInfo("Mensagem!");
    addWarning("Mensagem!");
    addError("Mensagem!");
}
 
 (...)

Ele não dá erro, não aparece nada útil no StackTrace, nem dá exceção.

Se no onInit() do bean eu chamar o método acima, ele executa normalmente; mas se chamo ao clicar o botão, não acontece nada.

Já li tópicos tipo esses:

Já experimentei usar “action” e “onclick” no lugar de “actionListener

Já experimentei usar process="@form" e update=":messages" e também ajax="false"

Já experimentei usar “<p:” ao invés de “<h:

Já debuguei. Quando eu clico no botão, o debug não vai para o método.

A única forma do botão acionar o método é se eu usar immediate="true"
mas isso não resolve o problema porque eu tenho um outro botão que chama um método para persistir os dados do formulário. E o immediate não processa dados, mesmo se botar o “process”.

Por isso, peço ajuda aos colegas. Alguém já passou por isso antes? Tem alguma ideia do que poderia ser?

Desde já muito obrigado.

7 Respostas

Lucas_Camara

Estranho msm. Algum método de outro managedBean funciona?

Fefo80

Desse sistema, esse é o único.

Nos demais sistemas (com mesma arquitetura, mesmo Tomcat e mesma versão de Java; e dependências etc.) rodam normal.

Lucas_Camara

Uma coisa é que, ao usar actionListener, o método no managedBean tem que receber um ActionEvent:

public void testeMensagem(ActionEvent event) {

Porém, vc também testou apenas com action e não funcionou. Será que vc não tem form dentro de form não?

Fefo80

Tem não.

Na realidade, por curiosidade, os outros sistemas irmãos, que usam forms e beans, têm “actionListener” mas os métodos do bean não têm “ActionEvent”.

Fefo80
Solucao aceita

@Lucas_Camara encontrei o erro… Fui estudar como o JSF trabalha e vi que podia ser problema de validação. O form tem mais de 90 campos, gerados automaticamente. Um deles estava com required=“true” quando era para estar false. Simples assim.

Lucas_Camara

Eita. heheh brabo demais qdo é assim. Lembro de uma vez que fiquei umas 3 horas por conta de um ponto-e-vírgula kkkk.

Agora moço, um form de 90 campos é de lascar msm viu. :sweat_smile:, mas bom que resolveu.

Fefo80

Nada que um bom linter não resolva. :wink:

Lembrei de um meme que vi quando passei pelo mesmo problema:

:rofl: :rofl: :rofl:

Criado 9 de setembro de 2021
Ultima resposta 15 de set. de 2021
Respostas 7
Participantes 2