[Resolvido] VRaptor - Popular entidade Gasto com atributo não primitivo

Bom dia,

estou desenvolvendo uma aplicação básica em JPA + VRaptor para estudo.

Tenho uma entidata Gasto, com um atributo TipoPagamento (também uma entidade).

Fiz um formulário para adicionar um novo Gasto no banco, que tem um ComboBox para selecionar o TipoPagamento (À vista, Crédito ou parcelado).

O problema é que quando eu dou um “Enviar” e mando imprimir os dados do Gasto o TipoPagamento fica como null

Segue minha classe Gasto

@Entity
public class Gasto implements Serializable {

	@Id
	@GeneratedValue
	@Column(name = "cod_gasto")
	private Long id;
	private double valor;
	private Date compra;
	private String detalhes;
	@ManyToOne(cascade = CascadeType.ALL)
	private TipoPagamento tipo;

	public void setTipo(Long e) {
		this.tipo = new TipoPagamento();
		tipo.setId(e);
	}

        //Considerem todos os getters e setters

}

Classe tipo Pagamento

@Entity
public class TipoPagamento implements Serializable {
	
	@Id
	private Long id;
	private String descricao;
	
	public TipoPagamento() {}

	public TipoPagamento(EnumTipoPagamento tipo) {
		this.id = tipo.getId();
		this.descricao = tipo.getDescricao();
	}
	
	public Long setId(Long e) {
		this.id = e;
	}

        //Considerem os getters e setters

}

O EnumTipoPagamento

public enum EnumTipoPagamento {
	
	A_VISTA(1L, "Pagamento à vista"), CREDITO(2L, "Pagamento no cartão de crédito"), PARCELADO(3L, "Pagamento parcelado");
	
	private Long id;
	private String descricao;

	private EnumTipoPagamento(Long tipo, String descricao) {
		this.id = tipo;
		this.descricao = descricao;
	}

        //getters e setters para id e descricao

}

Formulário do JSP

<form action="gasto.adiciona.logic">
	Valor: <input type="text" name="gasto.valor" /><br />
	Data: <input type="text" name="gasto.data" /><br />
	Tipo de pagamento:
	<select name="gasto.tipo.id">
		<option value="1">À vista</option>
		<option value="2">Crédito</option>
		<option value="3">Parcelado</option>
	</select><br />
	<text-area name="gasto.descricao"></text-area>
	<input type="submit" value="Cadastrar" />
</form>

Não sei mais o que fazer, por isso recorro a vocês.

Agradeço desde já qualquer tipo de ajuda.
Abraços

Oi Guedes, pelo jeito você vai precisar criar um converter para esse tipo de dado.

De uma olhada nesse link:

http://www.vraptor.org/converter/enum.html

Olá leonardom,

Cara, deu certo.
Valeu.

Seguindo o link que você me passou deixei meu GastoLogic da seguinte maneira:

@Component
public class GastoLogic {
	
	@Parameter
	private EnumTipoPagamento tipo;
	
	public void adiciona(Gasto g) {
		g.setTipo(tipo);
		System.out.println("Gasto adicionado\n" + g);
	}
	
	public void formulario() {}

}

antes estava assim:

@Component
public class GastoLogic {
	
	public void adiciona(Gasto g) {
		System.out.println("Gasto adicionado\n" + g);
	}
	
	public void formulario() {}

}

Está com o System.out porque ainda estava testando.

Mas é isso ai, fica registrado para futuras buscas.

Obrigado leonardom.

Abraços