Uma notícia e tanto...
Java EE moves to Eclipse
Vento no rosto, limpeza da alma.
Nada como a satisfação que se tem em cima de uma moto.
Aqui falaremos das experiências vividas, observadas e absorvidas no mundo das duas rodas, além de tratar assuntos do cotidiano.
Bem vindo ao meu Blog.
sexta-feira, setembro 15, 2017
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
<%pageContext.setAttribute("enumTipoInsumoValues", br.com.rogeriovalente.form.MaterialForm.getEnumTipoInsumoValues());
%>
MaterialForm (Deixei só o método que retorna a lista de enum que é o principal nesse post)
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
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
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;
}
}
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;
}
}
Assinar:
Postagens (Atom)