1
resposta

Enum para popular um combo

Estou seguindo a aula 3 de Spring MVC I, e me deparei com o uso de "enum" para o tipo de preço no exemplo exposto, o caso é que eu estou fazendo o curso e migrando um sistema que eu já fiz usando outras tecnologias, enfim, meu objetivo é diferente do exemplo, mas vi muita similaridade, só me falta perceber como eu posso fazer para que a minha enumeração seja útil para um registro de ausência, os tipo são:

package br.gov.df.sinesp.sca.model;

public enum Tipo {

    FERIAS("Férias"),
    ABONO("Abono"),
    ATESTADO("Atestado"),
    TREINAMENTO("Treinamento"),
    SEMINARIO("Seminário"),
    RECESSO("Recesso");

    public String rotulo;

    Tipo(String nome) {
        rotulo = nome;
    }

    public String getRotulo() {
        return rotulo;
    }

}

Esse é o meu enum, blz... agora eu tenho a classe de registro com persistência no banco, igual ao curso aí:

package br.gov.df.sinesp.sca.model;

import java.sql.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Registro {

    @Id    @GeneratedValue (strategy=GenerationType.IDENTITY)
    private int id;
    private String nome;
    private Date inicio;
    private Date fim;
    private String numeroSei;
    private Tipo tipo;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Tipo getTipo() {
        return tipo;
    }

    public void setTipo(Tipo tipo) {
        this.tipo = tipo;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Date getInicio() {
        return inicio;
    }

    public void setInicio(Date inicio) {
        this.inicio = inicio;
    }

    public Date getFim() {
        return fim;
    }

    public void setFim(Date fim) {
        this.fim = fim;
    }

    public String getNumeroSei() {
        return numeroSei;
    }

    public void setNumeroSei(String numeroSei) {
        this.numeroSei = numeroSei;
    }

    @Override
    public String toString() {
        return "Registro [id=" + id + ", nome=" + nome + ", tipo=" + tipo + ", inicio=" + inicio + ", fim=" + fim
                + ", numeroSei=" + numeroSei + "]";
    }

}

O objetivo é, tenho tipos limitados (enum) quero carregar um combo na .jsp e guardar o tipo, pode ser o id do tipo ou o nome do enum mesmo, sei que do jeito que está aí não funciona, mas estou justamente pensado como fazer e nas pesquisas que fiz ainda não encontrei um jeito, espero que me ajudem. Segue o arquivo .jsp também, ainda não inseri o tipo em um "selectOneMenu", não sei onde puxar já que normalmente eu uso isso com primeFaces, mas nesse projeto eu não estou utilizando

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport"
    content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
    integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
    crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
    integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
    crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script
    src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
    integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
    crossorigin="anonymous"></script>
<title>Página Inicial da Aplicação</title>
</head>
<body>
    <form action="/SCA/ausencia" method="POST">
        <div class="panel panel-default">
            <div class="panel-heading">Registro de ausência</div>
            <div class="panel-body">
                <div>
                    <label>Nome</label> <input type="text" name="nome">
                </div>
                <!-- http://www.guj.com.br/t/enum-e-selectonemenu/202020/2 -->
                <div>
                    <label>Tipo</label> <input type="text" name="tipo">
                </div>
                <div>
                    <label>Início</label> <input type="date" name="inicio">
                </div>
                <div>
                    <label>Fim</label> <input type="date" name="fim">
                </div>
                <div>
                    <label>Número SEI</label> <input type="text" name="numeroSei">
                </div>
            </div>
            <button type="submit">Registrar</button>
        </div>
    </form>
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-12 text-center">
                <a class="btn btn-success">Sucesso</a> <a class="btn btn-warning">Alerta</a>
                <a class="btn btn-danger">Perigo</a>
            </div>
        </div>
    </div>
</body>
</html>
1 resposta

Opa, você precisa colocar o array de enum TIpo na página, fazer um foreach por elas e usar a tag selectdo html. No value de cada option você precisa passar o nome da enum, que pode ser obtido através do método getNameda enum.