Boa noite pessoal!
Estou com a seguinte dúvida estou tentando chamar meu método no ComandButton, mas este método recebe um paramêtro e esta dando erro!
" action="{moedaBean.calcular()}":Method not found:"
vamos ver… esta sintaxe me parece incorreta:
action="{moedaBean.calcular()}
Caso não seja isso, verifique se o seu bean está anotado com o @ManagedBean e se vc está chamando ele corretamente.
Caso não descubra poste o código que chama este método.
Abraço.
JeffersonMendes
Obrigado pelo retorno!
Esta sintaxe estava usando quando eu não estava passando parâmetro e funcionava perfeitamente! Como agora necessito deste parâmetro não funciona! Acredito que tenha outra forma de chamar quando há algum parâmetro …
Segue MoedaBean
packagebr.com.conversormoeda.service.moeda.bean;importjavax.faces.bean.ManagedBean;importjavax.faces.bean.ManagedProperty;importjavax.faces.bean.SessionScoped;importcom.sun.xml.internal.bind.v2.TODO;importbr.com.conversormoeda.model.vo.Cotacao;importbr.com.conversormoeda.model.vo.Moeda;importbr.com.conversormoeda.service.MoedaServiceImpl;@ManagedBean(name="moedaBean")@SessionScopedpublicclassMoedaBean{//Instânciando Classes Moeda e CotacaoprivateMoedamoeda=newMoeda();privateCotacaocotacao=newCotacao();//Instânciando class ServiceImpl@ManagedProperty(value="#{moedaServiceImpl}")privateMoedaServiceImplmoedaServiceImpl=null;//Construtor DefaultpublicMoedaBean(){}//Método para listarMoedaspublicvoidlistarPossiveisMoedas(){moeda.setListaMoeda(this.getMoedaServiceImpl().listarPossiveisMoedas());}//Método para calcular ConversoespublicStringcalcular(Cotacaocotacao){switch(moeda.getCodListaDe()){case1:conversaoDolar(cotacao);break;case2:conversaoDolarCanadense();break;case3:conversaoEuro();break;case0:System.out.println("ERRO");break;}returnnull;}//Método para volar para a página de cotacaopublicStringvoltar(){return"Cotacao";}//Método para converter para DOLARpublicvoidconversaoDolar(Cotacaocotacao){if(moeda.getCodListaPara()==2){moeda.setConversaoDolar(Cotacao.getReal()/cotacao.getDolarAmericano());}elseif(moeda.getCodListaPara()==3){moeda.setConversaoDolar(Cotacao.getReal()/cotacao.getDolarCanadense());}elseif(moeda.getCodListaPara()==4){moeda.setConversaoDolar(Cotacao.getReal()/cotacao.getEuro());}}//Método para converter para DOLARCANADENSEpublicvoidconversaoDolarCanadense(){if(moeda.getCodListaPara()==1){}elseif(moeda.getCodListaPara()==3){}elseif(moeda.getCodListaPara()==4){}}//Método para converter para EUROpublicvoidconversaoEuro(){if(moeda.getCodListaPara()==1){}elseif(moeda.getCodListaPara()==2){}elseif(moeda.getCodListaPara()==4){}}/* * Getters e Setters */publicMoedagetMoeda(){returnmoeda;}publicvoidsetMoeda(Moedamoeda){this.moeda=moeda;}publicMoedaServiceImplgetMoedaServiceImpl(){returnmoedaServiceImpl;}publicvoidsetMoedaServiceImpl(MoedaServiceImplmoedaServiceImpl){this.moedaServiceImpl=moedaServiceImpl;}publicCotacaogetCotacao(){returncotacao;}publicvoidsetCotacao(Cotacaocotacao){this.cotacao=cotacao;}}
PuRgAuM
Na verdade acredito que esta parte esteja correta.
O que deve estar errado é como este método está sendo chamado pela página xhtml…
como o [b]purgaum/b disse, o problema é a chamada do método.
No teu MB você tem o método que recebe uma cotação
public String calcular(Cotacao cotacao) {
Porém, no xhtml, você chama o método SEM a cotação.
action="{moedaBean.calcular()}
A chamada no xhtml precisa ser compatível com o que existe no MB.
Hebert_Coelho
Para passar parâmetro pela chamada do método, é necessário ter a versão mais nova do EL.
Até onde eu sei, você pode passar atributos “simples” no parâmetro.
Você está chamando o método sem passar nenhum parâmetro.
Tente assim: public String calcular(int numero)
E chame assim #{moedaBean.calcular(3)}
Isso eu sei que funciona.
R
raf4ever
Hebert Coelho:
1) Para passar parâmetro pela chamada do método, é necessário ter a versão mais nova do EL.
Cara,se eu não me engano no JSF 2.0 a chamada por EL já vem habilitada por padrão…
Hebert_Coelho
raf4ever:
Hebert Coelho:
1) Para passar parâmetro pela chamada do método, é necessário ter a versão mais nova do EL.
Cara,se eu não me engano no JSF 2.0 a chamada por EL já vem habilitada por padrão…
Nada, eu tive esse problema a pouco tempo. =/
Tenta pegar o Tomcat 6 (acho que é com o 6 mesmo) e fazer isso, não vai. =/
Se não me engano, a versão 2.5 do servlet não habilita.
JeffersonMendes
Problema Resolvido!
Ao invés de pegar um parâmetro eu peguei o Bean preenchido em sessão! Ficou bem mais simples
Encontrei a solução aqui:
Olha o que eu fiz:
//Pegando a sessão do Bean@ManagedProperty(value="#{cotacaoBean}")privateCotacaoBeancotacaoBean;
Pegando o valor preenchido:
//peguei o valor preenchido através do "Get" --> cotacaoBean.getCotacao().getDolarAmericano()publicvoidconversaoDolar(){if(moeda.getCodListaPara()==2){moeda.setConversaoDolar(Cotacao.getReal()/cotacaoBean.getCotacao().getDolarAmericano());}
Chamando no .xhtml… sem passa parâmetro nem nada!!!