Chamar método passando parâmetro JSF 2.0[RESOLVIDO]

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:"

Alguém sabe me dizer o que esta ocorrendo?

Segue método calcular

public String calcular(Cotacao cotacao) {
		switch (moeda.getCodListaDe()) {
		case 1:
			conversaoDolar(cotacao);
			break;
		case 2:
			conversaoDolarCanadense();
			break;
		case 3:
			conversaoEuro();
			break;
		case 0:
			System.out.println("ERRO");
			break;
		}
		return null;
	}

OBS: Este V.O Cotacao vem preenchido da pagina anterior.

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.

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

package br.com.conversormoeda.service.moeda.bean;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import com.sun.xml.internal.bind.v2.TODO;

import br.com.conversormoeda.model.vo.Cotacao;
import br.com.conversormoeda.model.vo.Moeda;
import br.com.conversormoeda.service.MoedaServiceImpl;

@ManagedBean(name="moedaBean")
@SessionScoped
public class MoedaBean {
	
	//Instânciando Classes Moeda e Cotacao
	private Moeda moeda = new Moeda();
	private Cotacao cotacao = new Cotacao();

	//Instânciando class ServiceImpl
	@ManagedProperty(value="#{moedaServiceImpl}") 
	private MoedaServiceImpl moedaServiceImpl = null;

	//Construtor Default
	public MoedaBean(){
	}
	
	//Método para listarMoedas
	public void listarPossiveisMoedas(){
		moeda.setListaMoeda(this.getMoedaServiceImpl().listarPossiveisMoedas());
	}

	//Método para calcular Conversoes
	public String calcular(Cotacao cotacao) {
		switch (moeda.getCodListaDe()) {
		case 1:
			conversaoDolar(cotacao);
			break;
		case 2:
			conversaoDolarCanadense();
			break;
		case 3:
			conversaoEuro();
			break;
		case 0:
			System.out.println("ERRO");
			break;
		}
		return null;
	}
	
	//Método para volar para a página de cotacao
	public String voltar(){
		return "Cotacao";
	}
	
	//Método para converter para DOLAR
	public void conversaoDolar(Cotacao cotacao){
		if (moeda.getCodListaPara() == 2) {
			moeda.setConversaoDolar(Cotacao.getReal()/cotacao.getDolarAmericano());
		}else if (moeda.getCodListaPara() == 3) {
			moeda.setConversaoDolar(Cotacao.getReal()/cotacao.getDolarCanadense());
		}else if (moeda.getCodListaPara() == 4) {
			moeda.setConversaoDolar(Cotacao.getReal()/cotacao.getEuro());
		}
	}
	//Método para converter para DOLARCANADENSE
	public void conversaoDolarCanadense(){
		if (moeda.getCodListaPara() == 1) {
			
		}else if (moeda.getCodListaPara() == 3) {

		}else if (moeda.getCodListaPara() == 4) {
			
		}
	}
	//Método para converter para EURO
	public void conversaoEuro(){
		if (moeda.getCodListaPara() == 1) {

		}else if (moeda.getCodListaPara() == 2) {

		}else if (moeda.getCodListaPara() == 4) {
			
		}
	}
	/*
	 * Getters e Setters
	 */
	public Moeda getMoeda() {
		return moeda;
	}
	public void setMoeda(Moeda moeda) {
		this.moeda = moeda;
	}
	public MoedaServiceImpl getMoedaServiceImpl() {
		return moedaServiceImpl;
	}
	public void setMoedaServiceImpl(MoedaServiceImpl moedaServiceImpl) {
		this.moedaServiceImpl = moedaServiceImpl;
	}
	public Cotacao getCotacao() {
		return cotacao;
	}
	public void setCotacao(Cotacao cotacao) {
		this.cotacao = cotacao;
	}
}

Na verdade acredito que esta parte esteja correta.
O que deve estar errado é como este método está sendo chamado pela página xhtml…

No xhtml esta assim:

<h:commandButton value="#{msg.label_calcular}"
      title="#{msg.label_calcular}" styleClass="button"
      onmouseout="this.className='button'"
      onmouseover="this.className='buttonMouseOver'" 
      action="#{moedaBean.calcular()}"/>

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.

  1. Para passar parâmetro pela chamada do método, é necessário ter a versão mais nova do EL.
  2. Até onde eu sei, você pode passar atributos “simples” no parâmetro.
  3. 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.

[quote=Hebert Coelho]1) Para passar parâmetro pela chamada do método, é necessário ter a versão mais nova do EL.
[/quote]

Cara,se eu não me engano no JSF 2.0 a chamada por EL já vem habilitada por padrão…

[quote=raf4ever][quote=Hebert Coelho]1) Para passar parâmetro pela chamada do método, é necessário ter a versão mais nova do EL.
[/quote]

Cara,se eu não me engano no JSF 2.0 a chamada por EL já vem habilitada por padrão…[/quote]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.

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}")
private CotacaoBean cotacaoBean;

Pegando o valor preenchido:

//peguei o valor preenchido através do "Get" --> cotacaoBean.getCotacao().getDolarAmericano()
public void conversaoDolar(){
if (moeda.getCodListaPara() == 2) {
moeda.setConversaoDolar(Cotacao.getReal()/cotacaoBean.getCotacao().getDolarAmericano());
}

Chamando no .xhtml… sem passa parâmetro nem nada!!!

<h:commandButton value="#{msg.label_calcular}"
title="#{msg.label_calcular}" styleClass="button"
onmouseout="this.className='button'"
onmouseover="this.className='buttonMouseOver'" 
action="#{moedaBean.calcular()}"/>

Obrigado a todos pela ajuda!
Quem quiser mais detalhes de como eu resolvi só perguntar

Por favor, respeite as normas do forum. Esse post é de 2012!