Página não comunica com bean

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.

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

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.

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?

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

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

2 curtidas

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.

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

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

:rofl: :rofl: :rofl: