VRaptor 3 com Enum

Amigos,

Estou tendo problema para salvar meu model Conta, tenho uma enum simples tipo

enum Tipo
{
    Usuario,
    Administrador
}

O que coloco no meu jsp e no controller para receber essa enum ?

Por exemplo, se for num , ficaria assim:

<select name="tipo">
    <option value="Usuario">Usuário</option>
    <option value="Administrador">Administrador</option>
</select>

e no seu controller

public void whatever(Tipo tipo){
...
...
}

Lembrando que, de acordo com a documentação, vc pode passar o ordinal do Enum tbm:

“Enum
Todas as enumerações são suportadas através do nome do elemento ou de seu ordinal. No exemplo a seguir, tanto o valor 1 como o valor DEBITO são traduzidos para Tipo.DEBITO:
public enum Tipo {
CREDITO, DEBITO
}”

http://vraptor.caelum.com.br/documentacao/conversores/

rafael, essa minha enum esta dentro do meu model Conta, eu tentei fazer desse jeito mas o atributo tipo continua nulo.

public salvar(Conta conta)
{
    contadao.salvar(conta);
    result.include("resultado", "Salvo com sucesso.");
}

//Anotação do Atributo na classe
@Enumerated(value = EnumType.STRING)

se a conta tem um atributo tipo, o nome do select tem que ser conta.tipo

Lucas ja to usando essa convenção objeto.atributo mas não funciona. To começando a achar que são jars adicionais do projeto.

como está a classe Conta, e como está o select?

silascou,
Estou usando enum no Vraptor então posso te passar um exemplo prático.

Enum:

package br.estacio.hermes.model;

public enum EstadoCivil {
	CASADO("Casado"), SOLTEIRO("Solteiro"), VIUVO("Víuvo"), SEPARADOJUDICIALMENTE(
			"Separado Judicialmente"), DIVORCIADO("Divorciado");

	private final String nome;

	EstadoCivil(String nome) {
		this.nome = nome;
	}

	public String getNome() {
		return nome;
	}
}

Controller:

public void formulario(Cliente cliente) {
		result.include("estadoCivilList", EstadoCivil.values());
		result.include("cliente", cliente);
}

jsp:

<select name="cliente.perfilDoCliente.estadoCivil" id="cliente.perfilDoCliente.estadoCivil">
					<option value=""></option>
					<c:forEach items="${estadoCivilList}" var="estadoCivil">
						<option value="${estadoCivil}" <c:if test="${cliente.perfilDoCliente.estadoCivil==estadoCivil}">selected="selected"</c:if> >${estadoCivil.nome}</option>
					</c:forEach>
				</select>

Se tiver qualquer dúvida com o código, é só falar.
Um abraço.

Boa tarde!

Estou com o mesmo problema citado acima. Gostaria de saber se alguém já conseguiu solucionar esse problema!

o valor da option tem que ser o texto da enum, e o name tem que ser um caminho pra um objeto do tipo da enum… deveria funcionar…

o que está acontecendo no seu caso?

Olá Lucas!

Consegui resolver o meu problema, mas vou postar aqui porque pode ajudar alguém em situação parecida.

Na verdade, acho que o que aconteceu foi algum tipo de bug na hora da geração do get e do set. No meu caso eu tinha a classe “TransferRequest” com o atributo “eTransferType”, conforme abaixo:

public class TransferRequest {

	private ETransferType eTransferType;

	public ETransferType geteTransferType() {
		return eTransferType;
	}

	public void seteTransferType(ETransferType eTransferType) {
		this.eTransferType = eTransferType;
	}

}

Esse “ETransferType” é o enum, e eu criei o atributo como eTransferType. Na hora de gerar o get e o set, o Eclipse gerou os nomes fora do padrão de maiúsculas e minúsculas, pois os nomes ficaram geteTransferType() e seteTransferType(…), quando na verdade o certo seria getETransferType() e setETransferType(…).

Por causa disso, acho que o VRaptor não conseguiu popular o atributo usando o set dele. Alterei o get e o set e o problema foi resolvido.

Não sei se a explicação está muito clara, mas de qualquer forma no meu caso aqui agora tá ok!