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>
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;
}
}
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;
}
}
Nenhum comentário:
Postar um comentário