Conversão de Enum

Aqui você aprende como usar o EnumConvertor do Vraptor para enumerações quando os parâmetros da requisição serão lidos.

Vamos passar pelos seguintes pontos:

  1. Criação do enumeração CategoryType
  2. Criação da lógica de negócios chamada CategoryTypeLogic
  3. Criação do arquivo jsp para o resultado
  4. Criação do arquivo html com um formulário que chama a nossa lógica (baseado no nome do enum)
  5. Outra possibilidade do arquivo html com um formulário que chama a nossa lógica (baseado no ordinal do enum)
  6. Teste

Tipo de Categoria

A classe CategoryType é bem simples:

package org.vraptor.example.enumeration;

public enum CategoryType {

        SIMPLE, COMPLEX, UNKNOWN;
        
        public String getName() {
                return name();
        }
        
}

Lógica para os tipos de categoria

Nos poderemos simplesmente usar parâmetro do método para ler os parâmetros da requisição e poderemos receber a enumeração pelo conversor padrão instalado:

package org.vraptor.example.enumeration;

@Component("categoryType")
public class CategoryTypeLogic {

        private CategoryType type;
        
        public void select(CategoryType type) {
                // Gostaria de fazer alguma coisa com o parâmetro type?
                System.out.println("Type: " + type.getName());
                this.type = type;
        }

        public CategoryType getType() {
                return this.type;
        }

}

/categoryType/select.ok.jsp

Agora vamos criar um arquivo jsp para o resultado que mostra o nome da enumerção.

Como a variável type foi ejetada (outjected), nos podemos acessá-la pela expression language: a expressão $type.name vai chamar o método getName do tipo e imprime o resultado:

<html>
O tipo seleciondo foi ${type.name}.
</html>

/categoryType/index.jsp

Vamos prosseguir com nosso formulário, onde o usuário seleciona o valor da enumeração. Nos iremos mostrar uma caixa para selecionar e chamar nossa lógica de negócios.

<html>
<!-- usando o método get, você pode acompanhar os valores do formulário no browser -->
<form action="categoryType.select.logic" method="get">

        Tipo de categoria:
        
        <select name="type">
                <option value="SIMPLE">simple</option>
                <option value="COMPLEX">complex</option>
                <option value="UNKNOWN">unknown</option>
        </select>
        
        <input type="submit"/>
        
</form>
</html>

Outra possibilidade para o formulário

Você também pode usar o numero ordinal da enumeração ... desse jeito você evita problemas, se alguém mudar a ordem dos seus elementos da enumeração:

<html>
<!-- usando o método get, você pode acompanhar os valores do formulário no browser -->
<form action="categoryType.select.logic" method="get">

        Tipo de categoria:
        
        <select name="type">
                <option value="0">simple</option>
                <option value="1">complex</option>
                <option value="2">unknown</option>
        </select>
        
        <input type="submit"/>
        
</form>
</html>

Testing

Agora é a hora de testar o arquivo /categoryType/index.jsp ...

Quando você mandar o formulário executar, o EnumConverter descobrirá o valor selecionado e preencherá a variável type na nossa lógica de negócios.

Depois o método select da lógica será executada e a variável type será ejetada.

O arquivo result.jsp mostra no final, qual o tipo foi selecionado.