Chamar o Validate() no DynaForm?

Pessoal, estou com uma dúvida, como valido meus campos no formulário Dyna ?

Usando o DynaValidatorForm, vc pode chamar o form.validate() no seu execute

Como usa-lo ?

Capturei os dados assim:

DynaActionForm loginForm = (DynaActionForm) form;

String username = loginForm.getString(“username”);
String userpassword = loginForm.getString(“userpassword”);

Como posso validar se o usuário estiver vazio ?

Calmae, calmae…
Se vc quer validar dentro do proprio Action, vc pode usar uma validação comum… tipo if("".equals(usuario) then…
Mexendo com o ActionMessages para o retorno dos erros…

Aconselho a usar a validação do Validator, em xml, usar um DynaValidatorForm e chamar o form.validator…

Rodrigo, entendo o que disse, mas como posso fazer,

o método validate() retorna um ActionError

Como posso fazer validar cada campo, por exemplo não posso fazer isso:

form.Validator(get.String(“username”);

Como posso validar o campo ?

O método validate() do DynaActionForm não faz nada… ele retorna um ActionErrors nulo…

Se vc precisa validar no servidor seu form, [edited] utilizando forms dinamicos [/edited] vc precisa:

  1. Ulitizar um DynaValidatorForm, criar o xml de validação e chamar o form.validate()

  2. Validar 'na mão’o seu form dentro da sua action

Rodrigo, desculpa a ignorancia…

Mas ainda não entendo como validar o campo, estou entendendo o processo como um todo, o form inteiro, mas como validar e capturar um erro no campo username ?

Seguinte

Vc está usando um form dinamico, que nada mais é do que um Mapa (Map), onde os dados são armazenados mediante uma chave… Com isso, vc não tem um método validate, já que a validação sempre muda de form pra form. Portanto, se vc continuar utilizando o DynaActionForm, vc não vai conseguir uma validação automatica nele. Para isso, vc terá que, dentro do seu Action, no metodo execute, executar a validação na mão… exemplo

ActionErrors errors = new ActionErrors();
if("".equals(username)) errors.add(new ActionMessage(…));
if("".equals(password)) errors.add(new ActionMessage(…));

if(!errors.isEmpty()) {
super.saveErrors(errors, request);
return ERROR; //Retorna pra página de erro ou para a input
}

Diante desta deficiencia, inventaram o DynaValidatorForm, que lê um arquivo xml e valida este form de acordo com as regras descritas.
Para isso, vc precisa preparar sua aplicação para receber o Validator, da Apache, preparar o arquivo de validação e colocar o seguinte código.

DynaValitatorForm form = (DynaValitatorForm) actionForm;
form.validate();

Rodrigo, obrigado pelo texto, muito grato pela atenção !!!

Até agora perfeito, só mais uma dúvida, como farei o retorno das mensagens ?

Sempre depende… mas vamos lá…

Se vc utilizar o primeiro código, validando na mão, quando vc chamar o super.saveErrors(…), o controlador irá disponibilizar este objeto no request e a tag de logica de mensagens irá mostra-los…

Já na segunda maneira, isso será feito da mesma maneira… hehehe, mas automaticamente…

Rodrigo, no struts-config, no campo "type’

deverá conter qual valor ?
type="org.apache.struts.DynaActionForm"&gt
type="org.apache.struts.validator.DynaValidatorForm"&gt


<form-bean name=“loginDynaForm”
type=“org.apache.struts.validator.DynaActionForm”>
<form-property name=“username” type=“java.lang.String”/>
</form-bean>
</form-beans>

Rodrigo, pra finalizar hehehe

No jsp

<html:text property=“username” />

Devo usar a tag: <bean:message/> ou <html:error/> ?

Calma…

O html:text vc vai continuar usando… o bean:message é pra pegar as mensagens do resource… o html:errors é pra mostrar os erros… cada um com seu cada um…

Rodrigo, me ajuda brother

Quando executo o projeto ele já cai na mensagem…

Como faço para iniciar a página com os campos limpos ?

E como deverá ser o meu submit ?

Explique melhor…

Como?!?!? Se seu form não tiver um valor initial setado no xml ele deveria vir branco, a não ser que vc sete um valor inicial no html:text

Um botão submit acho que mataria a sua duvida… hehehe… brincadeira… vc deve setar a action no seu html:form para a action mapeada no struts-config

Rodrigo to te "enchendo né brother…rs mas é pra uma boa causa, lá vai…

Quando executo o projeto, cai na tela de login já com a mensagem

Usuário
*favor preencher o usuário

Aconteçe que a mensagem já está lá antes do submit, antes mesmo que eu preencha o usuário ele já traz a mensagem, acho que não está validando, oque posso verificar ?