Olá Pessoal,
Estou com um problema e gostaria de saber se alguém poderia me ajudar…
Estou trabalhando com struts 1.
Eu tenho um jsp que tem um html:text chamado ano configurado no meu ActionForm como Integer.
Na primeira vez que a minha classe Action (metodo: prepararTela) é chamada para montar a tela o valor de ano é nulo (Eu fiz o debug e identifiquei o valor desta propriedade), porém se eu submeto o formulario sem preencher nenhum valor neste campo, a classe Action (validarCampos) que vai tratar esta ação recebe a propriedade ano dentro do form com o valor 0 (zero). Para o meu negócio é muito importante diferenciar um campo vazio de um campo 0 (zero). Em outras palavras, eu não quero que seja realizado a conversão para 0(zero) do campo que esta vazio.
Desde de já agradeço a todos ela atenção.
Isso de transformar nulo em zero é coisa do BeanUtils e não do FormAction.
Você pode, programaticamente setar um conversor assim:
ConvertUtils.register(new IntegerConverter(null), Integer.class);
ou, colocar dentro do web.xml, dentro da tag <servlet> do struts as tags
<init-param>
<name>convertNull</name>
<value>true</value>
</init-param>
Eu particularmente costumo usar a opção 2.
Agora um detalhe importante é em relação ao seu ActionForm ser tipado. Eu particularmente uso tudo como String no ActionForm e depois copia os dados p/ um outro objeto (nessa hora eu valido se as informações estão OK ou não). Fica ai a dica
Entendi…
Só fiquei com uma dúvida… Eu não estou usando BeanUtils no meu código. O struts utiliza ele automaticamente?
O que eu faço é:
Quando esta preparando a tela (A primeira vez que entra na Action)
MeuActionForm meuActionForm = new MeuActionForm ();
meuActionForm = (MeuActionForm) form
…
Na segunda vez que entra o form que vem como parametro está com zero, ao invés de nulo (porque eu não preenchi nada)
O BeanUtils é feito de forma automatica?
Utilize o Wrapper Integer, ao invez do primitivo int.
isso talvez resolva seu problema.
Opa, faz como Jair Rillo Junior disse, usa todos os atributos como String, desta forma vc evita que aconteça algum erro de cast ao enviar uma solicitação e, como ele mesmo disse, vc pode validar esses dados antes de fazer o processamento da requisição.
Sim. O Struts 1.x usa o BeanUtils e outros frameworks da apache.