JSF Navegaçao e Mensagem Login Inválido?

O componente está aceitando mensagens mas quando eu seto pelo ManageBean nao está renderizando a mensagem.

Pessoal estou com um problema na navegaçao, primeiro gostaria de que quando o usuário fosse inválido retornar para a página de Login.

E também exibir uma mensagem para o usuário.

Nao sei se existe uma outra forma melhor para fazer isso mas nao quero utilizar o Identity e os outros objetos, quero fazer uma coisa personalizada.
E mesmo depois em outras páginas quando efetuar um retorno para uma de cadastro por exemplo setando uma mensagem pelo MB futuramente posso ter problemas.

Segue abaixo os códigos que estou utilizando.:

[code]<f:view>
<h:form id=“formLogin”>

&lt;center&gt;
	&lt;rich:messages id="message" ajaxRendered="true"/&gt;
	&lt;h:messages id="messagess" styleClass="message"
			errorClass="errormsg" infoClass="infomsg" warnClass="warnmsg" rendered="#{true}"/&gt;
	&lt;h:panelGrid width="20%" columns="3" columnClasses="col1,col2"&gt;
    &lt;rich:panel&gt;
    	
        &lt;f:facet name="header"&gt;
        &lt;h:outputText value="Login" /&gt;
        	
        &lt;/f:facet&gt;
        
        	    &lt;h:outputLabel for="username"&gt;Username&lt;/h:outputLabel&gt;
                &lt;h:inputText id="username" value="#{loginMB.usuario}" required="true" requiredMessage="Informe o Usuário."/&gt;
                &lt;h:outputLabel for="password"&gt;Password&lt;/h:outputLabel&gt;
                &lt;h:inputSecret id="password"
                            value="#{loginMB.password}" required="true" requiredMessage="Informe o Password."/&gt;
                <br/><br/>
				&lt;center&gt;
				 &lt;h:commandButton value="Login" action="#{loginMB.validarLogin()}"/&gt;
				&lt;/center&gt;
    &lt;/rich:panel&gt;
	&lt;/h:panelGrid&gt;
	<br/>
	&lt;/center&gt;
	    &lt;/h:form&gt;

</f:view>[/code]

[code]@Name(“loginMB”)
@Scope(ScopeType.SESSION)
public class LoginMB {

@In(create = true, value = "loginControl")
private LoginControl loginControl;

@Logger
private Log log;

private String usuario;

private String password;

private Login login = new Login();

public javax.faces.context.FacesContext facesContext;

private FacesMessage message = new FacesMessage();

@Create
@Begin(join=true,flushMode = FlushModeType.MANUAL)
public void init(){
	
	facesContext = javax.faces.context.FacesContext.getCurrentInstance();
}
	
public String validarLogin() {
	
	login = loginControl.validarLogin(usuario, password);
	
	if (login != null) {
		// teste
		log.info("authenticating {0}", login.getUsuario());
		
		if ("Administrador".equals(login.getTipousuario().getNome())) {
			log.info("TIPO USUARIO {0}",login.getTipousuario().getNome());
		}
	} else {
		
		facesContext.addMessage("formLogin:message",new FacesMessage(FacesMessage.SEVERITY_ERROR, "Welcome New User","ERRO"));
		
		return "erro";
	}
	return "";
}

public void logout() {
	login = new Login();
}

public Login getLogin() {
	return login;
}

public void setLogin(Login login) {
	this.login = login;
}

public String getUsuario() {
	return usuario;
}

public void setUsuario(String usuario) {
	this.usuario = usuario;
}

public String getPassword() {
	return password;
}

public void setPassword(String password) {
	this.password = password;
}

}
[/code]

Conteúdo do pages.xml

&lt;page view-id="/login.xhtml"&gt;
	&lt;navigation from-action="#{loginMB.validarLogin()}"&gt;
		&lt;rule if-outcome="erro"&gt; 
			&lt;redirect view-id="/login.xhtml"/&gt; 
		&lt;/rule&gt;
		&lt;rule if="#{loginMB.login.tipousuario.id eq 1}"&gt;
			&lt;redirect view-id="/homeAdmin.xhtml" /&gt;
		&lt;/rule&gt;
		&lt;rule if="#{loginMB.login.tipousuario.id eq 2}"&gt;
			&lt;redirect view-id="/homeComum.xhtml" /&gt;
		&lt;/rule&gt;			
	&lt;/navigation&gt;
&lt;/page&gt;

sodrope, um dos “erros” mais comuns nesse caso, é não atualizar o componente que exibe a mensagem pelo backingbean. Como não utilizo rich não sei se existe um componente como o RequestContext do primefaces que viabiliza refresh em componente pelo backingbean, mas também pode fazer por faces:

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("componenteMensagem");

no momento que atingir o erro no seu código, o gatilho pra mensagem vai ser disparado e atualizar o componente responsável pela exibição do erro.