Validação de campos no Struts 2 [RESOLVIDO]

Olá, pessoal

Estou com um pequeno problema de validação utilizando Struts 2. Trata-se de uma tela de login. Ela possui dois campos: nome de usuário e senha. Criei o arquivo xml de validação destes campos, mas um erro está me dando dor de cabeça. Vou explicar o cenário: Eu submeto a página sem informar nenhuma informação nos campos, a validação é feita e as mensagens esperadas são apresentadas. Após isso, ao inserir um valor válido para o campo “nome de usuário”, a mensagem que fora apresentada na submissão anterior ainda permanece visível.

Este é o meu form:

<s:actionerror/>		
		<s:form action="login" validate="true">		
			<table border="0" class="tabela">
			  <tr>
			    <td><s:textfield name="usuario" label="Usuário" size="20"/></td>		   
			  </tr>
			  <tr>
			    <td><s:textfield name="senha" label="Senha" size="20"/></td>	
			  </tr>
			  <tr>
			    <td><s:submit name="btnEntrar" value="Entrar"></s:submit></td>		    
			  </tr>			  	 
			</table>					
		</s:form>

E este é o meu arquivo xml de validação:

<validators>	
	<field name="usuario">
		<field-validator type="requiredstring">
			<param name="trim">true</param>			
			<message>Informe o usuário.</message>
		</field-validator>
	</field>
	<field name="senha">
		<field-validator type="required">
			<param name="trim">true</param>
			<message>Informe a senha.</message>
		</field-validator>
		<field-validator type="stringlength">		
			<param name="minLength">8</param>
			<param name="trim">true</param>
			<message>A senha deve ter no mínimo ${minLength} caracteres.</message>			
		</field-validator>	 	
	</field>
</validators>

Já pesquisei…tentei algumas outras soluções utilizando dwr, mas não deu certo. Alguém saberia me informar a solução deste problema?

Nao entendi bem o workflow do processo.

Depois que você digita os dados OK, dá submit e tals, sua Action retorna para o mesmo JSP?
Se sim, posta ai o código da sua Action e o struts.xml

O arquivo struts.xml é o seguinte:

<struts>	
	<include file="struts-default.xml">include</include>
	<package name="default" extends="struts-default">
		<action name="login" class="br.com.coc.model.action.LoginAction">
			<result name="input">/login.jsp</result>
			<result name="sucess">/home.jsp</result>
		</action>		
	</package>
</struts>

E a minha Action:

public String execute() throws Exception {
	
         if(hasActionErrors() || hasFieldErrors()) {
              return "input";
         }
         return Action.SUCCESS;

   }

Vou tentar explicar o comportamento novamente:
1- Submeto a tela de login com os dois campos “usuário” e “senha” vazios.
2- A validação é feita e as mensagens são exibidas.
3- Preencho um dos campos (usuário ou senha). Submeto a página. A validação é feita, mas a mensagem que foi exibida na submissão anterior é mantida para o campo que eu preenchi.

Outro cenário:
1- Submeto a tela de login com os dois campos “usuário” e “senha” vazios.
2- As mensagens de validação são exibidas.
3- Resubmeto a tela de login com os dois campos “usuário” e “senha” ainda vazios.
4- As mensagens aparecem duplicadas.

Hum que estranho hein eu sempre utilizei essa validação do Struts 2 e nunca tive esse problema…

Faz assim comenta a seguinte linha no seu xml.

<param name="trim">true</param> Se continuar o erro comenta a linha da classe

if(hasActionErrors() || hasFieldErrors()) { Isso só é um chute hein mas talvez possa ajudar.

Não deu certo, rodrigo_corinthians. Ainda não encontrei o erro, mas presumo que seja alguma coisa relacionada a configuração.

Abaixo estou anexando a imagem da tela de login após duas submissões consecutivas. Vejam que as mensagens são duplicadas, visto que eu simulei duas submissões com os campos vazios. É como a tela não fossem atualizada.

Vishhh entaum agora retira a linha <s:actionerror/> e tanb o validate=true do form, vamos apelar mais um pouco retira também a tabela e deixa somente as tags do Struts, quando usa <s:form> ele monta automaticamente uma tabela pro formulário…

Agora entendi sua duvida Camila

Pode ser algum problema do template usado. Eu vi que você está usando o template default + as tabelas que você está criando na mão.

Para teste, remova os códigos da tabela e deixa apenas o template default, algo assim

&lt;s:form action="login" validate="true"&gt;          
  &lt;s:textfield name="usuario" label="Usuário" size="20"/&gt;
  &lt;s:textfield name="senha" label="Senha" size="20"/&gt;
  &lt;s:submit name="btnEntrar" value="Entrar"&gt;&lt;/s:submit&gt;      
&lt;/s:form&gt;  

Muito obrigada, ManchesteR e rodrigo_corinthians pelas dicas. O problema era realmente a tag table. Valeu!!!

Nossa e eu me matando por causa deste mesmo problema …ja tava desistindo…
Deveria ter uma tema simililar ao simple só que com validação, pra não ficar dependente do templates que ele gera.
Também agradeço pessoal!!