Boa noite
Sou iniciante em Java EE, estou fazendo uma tela de cadastro, fiz a classe, o managed bean e a página em xhtml. Pelo que eu vi na página xhtml não esta reconhecendo o método que eu criei no managed bean. Se alguém puder me dar uma força ficarei muito grato. Segue o código fonte da página e o erro do console.
Console:
dez 19, 2017 9:06:41 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
ADVERTÊNCIA: #{cadastroProgMembrosBean.salvar}: javax.el.MethodNotFoundException: /cadastro/CadastroProgMembros.xhtml @15,100 action="#{cadastroProgMembrosBean.salvar}": Method not found: [email removido]()
javax.faces.FacesException: #{cadastroProgMembrosBean.salvar}: javax.el.MethodNotFoundException: /cadastro/CadastroProgMembros.xhtml @15,100 action="#{cadastroProgMembrosBean.salvar}": Method not found: [email removido]()
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:109)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
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:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: /cadastro/CadastroProgMembros.xhtml @15,100 action="#{cadastroProgMembrosBean.salvar}": Method not found: [email removido]()
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:92)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
... 28 more
Caused by: javax.el.MethodNotFoundException: /cadastro/CadastroProgMembros.xhtml @15,100 action="#{cadastroProgMembrosBean.salvar}": Method not found: [email removido]()
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:109)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
... 29 more
Classe ProgMembros:
package sistemawebiac.com.modelo;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="progmembros")
public class ProgMembros implements Serializable {
private static final long serialVersionUID = 1L;
private Long pkcodprogmemb;
private String descprogmemb;
private BigDecimal valor;
private Date valid_assinatura;
public Date getValid_assinatura() {
return valid_assinatura;
}
public void setValid_assinatura(Date valid_assinatura) {
this.valid_assinatura = valid_assinatura;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false)
public Long getPkcodprogmemb() {
return pkcodprogmemb;
}
public void setPkcodprogmemb(Long pkcodprogmemb) {
this.pkcodprogmemb = pkcodprogmemb;
}
public String getDescprogmemb() {
return descprogmemb;
}
public void setDescprogmemb(String descprogmemb) {
this.descprogmemb = descprogmemb;
}
public BigDecimal getValor() {
return valor;
}
public void setValor(BigDecimal valor) {
this.valor = valor;
}
}
Managed Bean
package sistemawebiac.com.controle;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sistemawebiac.com.dao.DaoGeneric;
import sistemawebiac.com.modelo.ProgMembros;
@ViewScoped
@ManagedBean(name="cadastroProgMembrosBean")
public class CadastroProgMembrosBean {
private ProgMembros progMemb = new ProgMembros();
private DaoGeneric<ProgMembros> daoProgMemb = new DaoGeneric<ProgMembros>();
public String salvar(){
daoProgMemb.salvar(progMemb);
return "";
}
public ProgMembros getProgMemb() {
return progMemb;
}
public void setProgMemb(ProgMembros progMemb) {
this.progMemb = progMemb;
}
public DaoGeneric<ProgMembros> getDaoProgMemb() {
return daoProgMemb;
}
public void setDaoProgMemb(DaoGeneric<ProgMembros> daoProgMemb) {
this.daoProgMemb = daoProgMemb;
}
}
DaoGeneric
package sistemawebiac.com.dao;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import sistemawebiac.com.util.jpa.JPAUtil;
public class DaoGeneric<E>{
public void salvar(E entidade){
EntityManager entityManager = JPAUtil.getEntityManager();
EntityTransaction entityTransaction = entityManager.getTransaction();
entityTransaction.begin();
entityManager.persist(entidade);
entityTransaction.commit();
entityManager.close();
}
}
CadastroProgMembros
<ui:composition template="/WEB-INF/template/LayoutPadrao.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<ui:define name="titulo">Programa Membros</ui:define>
<ui:define name="corpo">
<h1>Programa Membros</h1>
<p:toolbar ajax="false" style="margin-top: 20px">
<p:toolbarGroup>
<p:button value="Novo" outcome="/cadastro/CadastroProgMembros"/>
<p:commandButton value="Salvar" id="botaoSalvar" action="#{cadastroProgMembrosBean.salvar}"/>
</p:toolbarGroup>
<p:toolbarGroup align="right">
<p:button value="Pesquisa"/>
</p:toolbarGroup>
</p:toolbar>
<p:panelGrid columns="2" id="painel" style="width: 100%; margin-top: 20px"
columnClasses="rotulo, campo">
<p:outputLabel value="Código" for="codedt"/>
<p:inputText id="codedt" size="11" maxlenght="11" value="#{cadastroProgMembrosBean.progMemb.pkcodprogmemb}"/>
<p:outputLabel value="Descrição" for="descedt"/>
<p:inputText id="descedt" size="50" maxlenght="50" value="#{cadastroProgMembrosBean.progMemb.descprogmemb}"/>
<p:outputLabel value="Valor" for="valoredt"/>
<p:inputText id="valoredt" size="11" maxlenght="11" value="#{cadastroProgMembrosBean.progMemb.valor}"/>
<p:outputLabel value="Validade da assinatura" for="dtvalassin"/>
<p:calendar id="dtvalassin" mask="true" size="10" maxlenght="10" showbuttonpanel="true" locale="pt_BR" pattern="dd/mm/yyyy" navigator="true" value="#{cadastroProgMembrosBean.progMemb.valid_assinatura}"/>
</p:panelGrid>
</ui:define>
</ui:composition>