Validação com JBoss Seam não está mantendo estado

Boa noite.

Tenho uma aplicaçãozinha com Seam e até agora todas minhas validações estavam sendo feitas diretamente pelo hibernate validator através de anotações em minhas entities. Agora precisei fazer uma validação programaticamente direto na Action. Quando ocorre o erro, ele exibe a mensagem de erro corretamente, porém ele perde os dados digitados pelo usuário no fomulário. Quando ocorre algum erro simples de validação (@NotNull por exemplo) ele volta para o formulário com os dados preenchidos certinhos, o problema é na validação manual mesmo.

Meu form no xhtml está assim:

..
		<h:form id="formUsuario" styleClass="edit">
			<s:validateAll>
				<rich:panel>
					<f:facet name="header">
						<h:outputText value="#{messages[usuarioAction.keyLabelAct]}" />
					</f:facet>
					
					<s:decorate id="loginField" template="../layout/edit.xhtml">
						<ui:define name="label">#{messages['label.login']}</ui:define>
						<h:inputText value="#{usuarioAction.usuario.login}" id="txtLogin" required="true" size="15" />
					</s:decorate>
					
					<s:decorate id="nomeField" template="../layout/edit.xhtml">
						<ui:define name="label">#{messages['label.nome']}</ui:define>
						<h:inputText value="#{usuarioAction.usuario.nome}" id="txtNome" required="true" size="30" />
					</s:decorate>
					
					<s:decorate id="perfilField" template="../layout/edit.xhtml">
						<ui:define name="label">#{messages['label.perfil']}</ui:define>
						<h:selectOneMenu id="selectPerfil" value="#{usuarioAction.usuario.perfil}" required="true" 
							converter="#{usuarioAction.converterPerfil}">
							<s:selectItems var="perfil" value="#{usuarioAction.perfis}" label="#{perfil.nome}" 
								noSelectionLabel="#{messages['label.selecione']}"/>						
						</h:selectOneMenu>
					</s:decorate>
					
					<div style="clear:both">
						<span class="required">*</span>
						#{messages['label.camposObrigatorios']}
					</div>
				
				</rich:panel>
				
				<div class="actionButtons">
					<h:commandButton action="#{usuarioAction.add}" id="btnAdd" value="#{messages['label.incluir']}" 
						rendered="#{usuarioAction.act eq 'incluir'}"/>
					<h:commandButton action="#{usuarioAction.update}" id="btnUpdate" value="#{messages['label.alterar']}" 
						rendered="#{usuarioAction.act eq 'alterar'}"/>
					<h:commandButton action="#{usuarioAction.remove}" id="btnRemove" value="#{messages['label.excluir']}" 
						rendered="#{usuarioAction.act eq 'excluir'}"/>
					<s:button view="/usuario/list.xhtml" value="#{messages['label.cancelar']}" id="btnCancel" propagation="end"/>
				</div>
				
			</s:validateAll>
		</h:form>
...

Minha Action:

...
@Name("usuarioAction")
public class UsuarioAction extends BaseAction {

	private Usuario usuario = new Usuario();
	
	@In("#{usuarioService}")
	private UsuarioService usuarioService;
	
	@In("#{perfilService}")
	private PerfilService perfilService;
	
	@In
	private FacesMessages facesMessages;
	
	private EntidadeComIdConverter<Perfil> converterPerfil;
	
	private List<Perfil> perfis;
	
	@Begin(join = true)
	public String loadUsuario() {
		if(usuario != null && usuario.getIdUsuario() != null && 
				(getAct().equals(ACTION_ALTERAR) || getAct().equals(ACTION_EXCLUIR))) {
			usuario = usuarioService.findById(usuario.getIdUsuario());
			if(usuario == null) {
				facesMessages.add(FacesMessage.SEVERITY_ERROR, "#{messages['label.usuario.naoEncontrado']}");
				return NOT_FOUND;
			}
		} else {
			usuario = new Usuario();
		}
		return SUCCESS;
	}
	
	@End
	public String add() {
		if(usuarioService.existeUsuarioComLogin(usuario.getLogin())) {
			facesMessages.addToControl("txtLogin", "#{messages['erro.existe.usuario.login']}");
			return null;
		}
		
		usuarioService.add(usuario);
		facesMessages.add("#{messages['label.usuario.inserido']}");
		usuario = new Usuario();
		return SUCCESS;
	}
..

E minhas regras de navegação

<?xml version="1.0" encoding="UTF-8"?>
<page xmlns="http://jboss.com/products/seam/pages"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.1.xsd">
    
    <param name="idUsuario" value="#{usuarioAction.usuario.idUsuario}"/>
    <param name="act" value="#{usuarioAction.act}"/>
    <action execute="#{usuarioAction.loadUsuario}"/>
	
	<navigation>
		<rule if-outcome="notFound">
			<redirect view-id="/usuario/list.xhtml"/>
		</rule>		
	</navigation>
	
	<navigation from-action="#{usuarioAction.add}">
		<rule if-outcome="success">
			<redirect view-id="/usuario/list.xhtml"/>			
		</rule>
	</navigation>
	
	<navigation from-action="#{usuarioAction.update}">
		<redirect view-id="/usuario/list.xhtml"/>
	</navigation>	
  
	<navigation from-action="#{usuarioAction.remove}">
		<redirect view-id="/usuario/list.xhtml"/>
	</navigation>	 
        
</page>

Alguém tem idéia do que pode ser?Já tentei várias coisas, mas todas sem sucesso.

Desde já obrigado
Luciano

Tenta dar uma olhada na questão do escopo…

@Name(“usuarioAction”)

@Scope(ScopeType.CONVERSATION)

public class UsuarioAction extends BaseAction {

private Usuario usuario = new Usuario();