sexta-feira, setembro 15, 2017

Java EE moves to Eclipse

Uma notícia e tanto...
Java EE moves to Eclipse

terça-feira, agosto 15, 2017

Combobox com valores de enumerator em Struts 1.3

Me deparei com a necessidade de carregar um combobox (html:select) no Struts 1 com os valores vindos de um enumerator. Bem, como já tinha feito isso em projetos com JSF / Primefaces facilmente, decidi que deveria fazer quase da mesma forma no bom e velho Struts.
E não é que a implementação ficou muito simples?!
Sendo simples, não custa nada compartilhar, certo?

A primeira coisa é definir o enumerator, óbvio né...
Depois do enum definido, crie um método estático na classe Form que irá devolver uma lista de enum para o componente da interface.
Eu criei um método genérico, em uma classe Form básica que é estendida em todo form, onde é passado como parâmetro o nome completo do enum (pacote + nome). Assim é possível recuperar os valores de qualquer enum.

Insira na página JSP o import da classe Form e o código para inserir no contexto da página o valor da propriedade que armazenará a lista de enum.
Após a configuração do import e da propriedade, declare o combobox (html:select) usando a propriedade declarada.

E é só isso.
Bem simples não é?

Abaixo estão os artefatos.

Cabeçalho JSP


<%@page import="br.com.rogeriovalente.form.MaterialForm"%>

<%pageContext.setAttribute("enumTipoInsumoValues", br.com.rogeriovalente.form.MaterialForm.getEnumTipoInsumoValues());
%>


Componente select


<html:select property="tipoInsumo" styleClass="text">
<html:option value="" ></html:option>                            <html:optionsCollection name="enumTipoInsumoValues" value="tipoInsumo" label="descricao"/>
</html:select>

MaterialForm (Deixei só o método que retorna  a lista de enum que é o principal nesse post)


package br.com.rogeriovalente.form;


import br.com.rogeriovalente.constantsenum.TipoInsumoEnum;
import br.com.rogeriovalente.form.MainForm;

public class MaterialForm extends MainForm {

  public static final List<TipoInsumoEnum> getEnumTipoInsumoValues() {
    return Arrays.asList((TipoInsumoEnum[]) MainForm.getEnumValues("br.com.rogeriovalente.constantsenum.TipoInsumoEnum"));
  }

}



MainForm

package br.com.rogeriovalente.form;


import org.apache.struts.action.ActionForm;

public class MainForm extends ActionForm {

  @SuppressWarnings({ "rawtypes", "unchecked" })
  public static Enum[] getEnumValues(final String enumClassName) {
    Enum[] values = null;
    try {
      final Class<? extends Enum> enumType = (Class<? extends Enum>) Class.forName(enumClassName);
      values = enumType.getEnumConstants();
    } catch (final Exception exc) {
      exc.printStackTrace();
    }
    return values;
  }
}


Enumerator

package br.com.rogeriovalente.constantsenum;


public enum TipoInsumoEnum {
  BAG("B", "Bag"), ETIQUETA("E", "Etiqueta"), FRASCO("F", "Frasco"), RIBBON("R", "Ribbon"), TUBO("T",
      "Tubo"), OUTROS("O", "Outros");

  private String tipoInsumo;
  private String descricao;

  private TipoInsumoEnum(final String parTipoInsumo, final String parDescricao) {
    tipoInsumo = parTipoInsumo;
    descricao = parDescricao;
  }

  public final String getTipoInsumo() {
    return tipoInsumo;
  }

  public final void setTipoInsumo(final String parTipoInsumo) {
    tipoInsumo = parTipoInsumo;
  }

  public final String getDescricao() {
    return descricao;
  }

  public final void setDescricao(final String parDescricao) {
    descricao = parDescricao;
  }

}