Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro Method not found

Pessoal, estou com uma dificuldade em um projeto. O projeto usa o padrão Maven; e EJB (Wildfly), JSF, JPA (Hibernate), PrimeFaces e OmniFaces (Conversor). Existe uma página funcionario.xhtml que é para cadastrar funcionário relacionando ele a uma empresa (@ManyToOny). A página aparece normalmente, mas na hora de salvar o funcionário gera um erro alegando que o método salvar não foi localizado. No entanto já fiz diversos testes e pesquisei na net e vi bastante assunto com esse mesmo erro, mas nada resolveu a minha questão.

Antes de colar trechos do meu código, deixo aqui o link do GitHub para ver ele completo: https://github.com/hugoan/sindiatacadista

Log erro

00:16:10,506 WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (default task-10) #{funcionarioBean.salvar}: javax.el.MethodNotFoundException: /funcionario.xhtml @63,73 action="#{funcionarioBean.salvar}": Method not found: class br.com.sindiatacadista.bean.FuncionarioBean$Proxy$_$$_WeldSubclass.salvar(): javax.faces.FacesException: #{funcionarioBean.salvar}: javax.el.MethodNotFoundException: /funcionario.xhtml @63,73 action="#{funcionarioBean.salvar}": Method not found: class br.com.sindiatacadista.bean.FuncionarioBean$Proxy$_$$_WeldSubclass.salvar()
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:110)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
    at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
    at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
    at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
    at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: /funcionario.xhtml @63,73 action="#{funcionarioBean.salvar}": Method not found: class br.com.sindiatacadista.bean.FuncionarioBean$Proxy$_$$_WeldSubclass.salvar()
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    ... 45 more
Caused by: javax.el.MethodNotFoundException: /funcionario.xhtml @63,73 action="#{funcionarioBean.salvar}": Method not found: class br.com.sindiatacadista.bean.FuncionarioBean$Proxy$_$$_WeldSubclass.salvar()
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:109)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 46 more

00:16:10,514 SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (default task-10) javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: /funcionario.xhtml @63,73 action="#{funcionarioBean.salvar}": Method not found: class br.com.sindiatacadista.bean.FuncionarioBean$Proxy$_$$_WeldSubclass.salvar()
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
    at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
    at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
    at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
    at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: javax.el.MethodNotFoundException: /funcionario.xhtml @63,73 action="#{funcionarioBean.salvar}": Method not found: class br.com.sindiatacadista.bean.FuncionarioBean$Proxy$_$$_WeldSubclass.salvar()
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:109)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 46 more

Model

package br.com.sindiatacadista.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@SuppressWarnings("serial")
@Entity
public class Funcionario implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(nullable = false, length = 150)
    private String nome;

    @Column(nullable = false, length = 14, unique = true)
    private String cpf;

    @Column(nullable = false, length = 80)
    private String email;

    @Column(nullable = false, length = 80)
    private String departamento;

    @Column(nullable = false, length = 80)
    private String funcao;

    @ManyToOne(optional = false)
    private Empresa empresa;

    @Column(nullable = false, length = 4)
    private String ativo;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getDepartamento() {
        return departamento;
    }

    public void setDepartamento(String departamento) {
        this.departamento = departamento;
    }

    public String getFuncao() {
        return funcao;
    }

    public void setFuncao(String funcao) {
        this.funcao = funcao;
    }

    public Empresa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    public String getAtivo() {
        return ativo;
    }

    public void setAtivo(String ativo) {
        this.ativo = ativo;
    }


    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Funcionario other = (Funcionario) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return String.format("%s[id=%d]", getClass().getSimpleName(), getId());
    }

}

Dao

package br.com.sindiatacadista.dao;

import java.io.Serializable;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import br.com.sindiatacadista.model.Funcionario;

@SuppressWarnings("serial")
@Stateless
public class FuncionarioDAO implements Serializable {

    @PersistenceContext
    private EntityManager em;


    public void gravar(Funcionario funcionario) {
        this.em.persist(funcionario);
    }


    public void atualizar(Funcionario funcionario){
        this.em.merge(funcionario);
    }


    public void remover(Funcionario funcionario){
        this.em.remove(funcionario);
    }

    public List<Funcionario> listaTodosFuncionariosDaEmpresa(){
        return this.em.createQuery("select f from Funcionario f join f.empresa", Funcionario.class).getResultList();
    }
}

Bean

package br.com.sindiatacadista.bean;

import java.io.Serializable;
import java.util.List;

import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.transaction.Transactional;

import br.com.sindiatacadista.dao.EmpresaDAO;
import br.com.sindiatacadista.dao.FuncionarioDAO;
import br.com.sindiatacadista.model.Empresa;
import br.com.sindiatacadista.model.Funcionario;

@Named
@ViewScoped
@SuppressWarnings("serial")
public class FuncionarioBean implements Serializable {

    private Funcionario funcionario = new Funcionario();


    @Inject
    private FuncionarioDAO funcionarioDAO;

    @Inject
    private EmpresaDAO empresaDAO;

    @Transactional
    public void salvar(Funcionario funcionario) {
        System.out.println("O método salvar da classe funcionarioBean recebeu o seguinte funcionario: " + funcionario);
        if (funcionario.getId() == null) {
            this.funcionarioDAO.gravar(funcionario);
        } else {
            this.funcionarioDAO.atualizar(funcionario);
        }
    }

    // Gets e Sets
    public Funcionario getFuncionario() {
        return funcionario;
    }

    public void setFuncionario(Funcionario funcionario) {
        this.funcionario = funcionario;
    }

    public List<Funcionario> getFuncionarios() {
        return this.funcionarioDAO.listaTodosFuncionariosDaEmpresa();
    }

    public List<Empresa> getEmpresas(){
        return this.empresaDAO.listaTodasEmpresas();
    }
}

funcionario.xhtml

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

<h:head />
<h:body>

   <p:growl id="messages" showDetail="true" autoUpdate="true"/>

    <h:form id="formCadFuncionario">

        <p:fieldset legend="Cadastro de Funcionario">
            <h:panelGrid columns="2">

                <p:outputLabel for="nome" value="Nome" />
                <p:inputText id="nome" value="#{funcionarioBean.funcionario.nome}"
                    required="true" requiredMessage="Informe o nome" />

                <p:outputLabel for="cpf" value="CPF" />
                <p:inputMask id="cpf" value="#{funcionarioBean.funcionario.cpf}"
                    mask="999.999.999-99" required="true"
                    requiredMessage="Informe o CPF" />

                <p:outputLabel for="email" value="E-mail" />
                <p:inputText id="email" value="#{funcionarioBean.funcionario.email}"
                    required="true" requiredMessage="Informe o e-mail" />

                <p:outputLabel for="empresa" value="Empresa" />
                <p:selectOneMenu id="empresa" value="#{funcionarioBean.funcionario.empresa}" converter="omnifaces.SelectItemsConverter"
                    style="width:125px" required="true" requiredMessage="Informe o departamento">
                    <f:selectItem noSelectionOption="true" itemLabel="Selecione a empresa" />
                    <f:selectItems value="#{funcionarioBean.empresas}" var="empresa"
                        itemValue="#{empresa}" itemLabel="#{empresa.razaoSocial}" />
                </p:selectOneMenu>

                <p:outputLabel for="departamento" value="Departamento" />
                <p:selectOneMenu id="departamento" value="#{funcionarioBean.funcionario.departamento}"
                    style="width:125px" required="true"
                    requiredMessage="Informe o departamento">
                    <f:selectItem itemLabel="Selecione o departamento" itemValue="" />
                    <f:selectItem itemLabel="Administrativo" itemValue="Administrativo" />
                    <f:selectItem itemLabel="Contabil" itemValue="Contabil" />
                    <f:selectItem itemLabel="RH" itemValue="RH" />
                </p:selectOneMenu>

                <p:outputLabel for="funcao" value="Função" />
                <p:inputText id="funcao"
                    value="#{funcionarioBean.funcionario.funcao}" required="true"
                    requiredMessage="Informe a função" />

                <p:outputLabel for="cadastroAtivo" value="Cadastro Ativo" />
                <p:selectOneRadio id="cadastroAtivo"
                    value="#{funcionarioBean.funcionario.ativo}" required="true"
                    requiredMessage="Informe o estado do cadastrado">
                    <f:selectItem itemValue="Sim" itemLabel="Sim" />
                    <f:selectItem itemValue="Não" itemLabel="Não" />
                </p:selectOneRadio>

                <p:commandButton value="Salvar" action="#{funcionarioBean.salvar}"/>

            </h:panelGrid>
        </p:fieldset>
    </h:form>
</h:body>
</h:html>

Desde já agradeço pela ajuda!

3 respostas
solução!

Hugo boa madrugada, cara e acho que o erro do seu código está no html, olha a assinatura do seu metodo no seu bean.

 public void salvar(Funcionario funcionario) {

Tá vendo que tá passando um parametro no metodo? Pois então agora olha a sua html.

  <p:commandButton value="Salvar" action="#{funcionarioBean.salvar}"/>

Tá chamando um metodo sem nenhum parametro, eu acho que pode ser isso o seu erro, tira o parametro do seu metodo deixando ele sem.

@Transactional
    public void salvar() {
        System.out.println("O método salvar da classe funcionarioBean recebeu o seguinte funcionario: " + funcionario);
        if (funcionario.getId() == null) {
            this.funcionarioDAO.gravar(funcionario);
        } else {
            this.funcionarioDAO.atualizar(funcionario);
        }
    }

Deixa ele sem parametro e faz o teste. ok? e uma outra coisa, já que está usando CDI, deixa que ele mesmo toma conta de instanciar seus objetos.

 private Funcionario funcionario = new Funcionario();
@Inject
private Funcionario funcionario; // código mais elegante.

Me manda um retorno para ver se salvo.

Value, Alisson! Valeu mesmo! Resolveu meu problema.... não estava vendo esse detalhe. Obrigado por dedicar o seu tempo e compartilhar o seu conhecimento! Grato pela força cara!!!!

Hugo magina estamos aqui para isso mesmo, mete bala nesse estudo, abraço