Chamada a um método no ManagedBean

4 respostas
S

Olá pessoal.

Estou estudando a apostila da Caelum “Desenvolvimento avançado com JSF2 e EJB 3.1” onde no primeiro exercício da apostila me aconteceu o seguinte. Eis os códigos:

código da inteface Client

package br.com.soaressolutions.sessionbeans;

public interface Calculadora {
	
	public Double soma(Double a, Double b);

}

codigo classe de implementação

package br.com.soaressolutions.sessionbeans;
package br.com.soaressolutions.sessionbeans;

import javax.ejb.Local;
import javax.ejb.Stateless;

@Stateless
@Local(Calculadora.class)
public class CalculadoraBean implements Calculadora {

	@Override
	public double soma(double a, double b) {
		// TODO Auto-generated method stub
		return a + b;
	}

}

código managed bean

package br.com.soaressolutions.managedbean;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;

import br.com.soaressolutions.sessionbeans.Calculadora;

@ManagedBean(name="calculadoraMB")
public class CalculadoraMB {
	
	@EJB
	private Calculadora calculadora;
	private double a;
	private double b;
	private double resultado;
	
	
	public void soma() {
		this.resultado = this.calculadora.soma(a, b);
	}

	public double getA() {
		return a;
	}

	public void setA(double a) {
		this.a = a;
	}

	public double getB() {
		return b;
	}

	public void setB(double b) {
		this.b = b;
	}

	public double getResultado() {
		return resultado;
	}

	public Calculadora getCalculadora() {
		return calculadora;
	}

	public void setCalculadora(Calculadora calculadora) {
		this.calculadora = calculadora;
	}

	public void setResultado(double resultado) {
		this.resultado = resultado;
	}
	
	
	

}

jsf soma.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD// XHTML 1.0 Transactional//EN"
			"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transactional.dtd">
			
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
	<h:head>
		<title>Calculadora - Soma</title>
	</h:head>
	<h:body>
		<h:outputLabel value="Calculadora Web"></h:outputLabel>
		
		<h:outputLabel value="Entre com o valor de A: " />
		<h:inputText value="#{calculadoraMB.a}" />
		
		<h:outputLabel value="Entre com o valor de B" />
		<h:inputText value="#{calculadoraMB.b}" />
		
		<h:commandButton value="Soma" action="#{calculadoraMB.soma()}" />
		
		<h:outputLabel value="Resultado: " />
		<h:outputText value="#{calculadoraMB.resultado}" />
		
	</h:body>




</html>

Até ai tudo bem, é feito o deploy da aplicação no Glassfish, porém, quando mando executar o método soma() no managedbean o mesmo não é invocado para que seja mostrado o resultado. Alguém tem alguma idéia do que possa estar ocorrendo? Porque não consigo invocar o método?

Desde já agradeço a atenção de todos.

obrigado

4 Respostas

caio_ferreira

drsmachado

Debugou para ver se não executa?
Meu palpite, o método é executado, porém, você não percebe pois não há atualização da página.

S

Cara drs.

Peguei o erro. Estava faltando a tag <h:form> no documento. O botão só consegue ser acionado dentro desta tag. Cara, obrigado pela ajuda. Apanhei um pouco neste primeiro exercício pois tive que configurar o Glassfish uma porção de vezes até ele chegar no ponto em que eu queria. Em breve, criarei um tutorial e postar a url aqui para que ninguém tenha mais surpresas.

Abraços meu amigo e mais uma vez obrigado

drsmachado

Sem problemas.
Eu nem me atentei ao <h:form>
Os componentes h:commandButton e h:commandLink só funcionam dentro desta tag.
Ficamos no aguardo do tutorial, certamente ajudará muita gente.

Criado 1 de agosto de 2012
Ultima resposta 1 de ago. de 2012
Respostas 4
Participantes 3