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 ?
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
}”
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!