Problemas de Custom Validator em rich:modalPanel

Boa Tarde pessoal.

Estou com problema de validar o cadastro de usuários utilizando a implementação Validator.

o meu modalPanel está da seguinte forma.


<%-- Início do modalPanelCadastroUsuario --%>
                <rich:modalPanel id="modalPanelCadastroUsuario" width="400" height="400">
                    <f:facet name="header">
                        <h:outputText value="Cadastro de Usuário"/>
                    </f:facet>

                    <rich:panel id="panelCadastroUsuario">
                        <h:form id="formCadastroUsuario">
                            <table cellpadding="5" cellspacing="0" border="0">
                                <tr>
                                    <td>
                                        <h:outputText value="Nome:"/>
                                    </td>
                                    <td>
                                        <h:inputText value="#{userFaces.user.vchUserFirstname}" id="firstname">
                                            <f:validator validatorId="FirstnameValidator"/>
                                        </h:inputText>
                                    </td>
                                </tr>                                
                                <tr>
                                    <td>
                                        <h:outputText value="Sobrenome:"/>
                                    </td>
                                    <td>
                                        <h:inputText value="#{userFaces.user.vchUserLastname}" id="lastname"/>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <h:outputText value="Login:"/>
                                    </td>
                                    <td>
                                        <h:inputText value="#{userFaces.user.vchUserLogin}" id="login"/>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <h:outputText value="Senha:"/>
                                    </td>
                                    <td>
                                        <h:inputText value="#{userFaces.user.vchUserPassword}" id="senha"/>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <h:outputText value="Confirmar Senha:"/>
                                    </td>
                                    <td>
                                        <h:inputText value="#{userFaces.password}" id="retypesenha"/>
                                    </td>
                                </tr>                                
                                 <tr>
                                    <td colspan="2">
                                        <a4j:outputPanel ajaxRendered="true">
                                            <h:messages id="messageCadastroUsuario"/>
                                        </a4j:outputPanel>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <a4j:commandButton value="Cadastrar" action="#{userFaces.createUser}" oncomplete="closeCadastroUsuario()"/>
                                    </td>
                                    <td>
                                        <a4j:commandButton value="Limpar" action="#{userFaces.limpar}" reRender="panelCadastroUsuario"/>
                                        <a4j:commandButton value="Sair" action="#{userFaces.limpar}" oncomplete="#{rich:component('modalPanelCadastroUsuario')}.hide()" reRender="panelLogin"/>
                                    </td>
                                </tr>
                            </table>
                        </h:form>
                    </rich:panel>
                </rich:modalPanel>
                <%-- Fim do modalPanelCadastroUsuario --%>

Agora meu JavaScript que valida o h:messages está da Seguinte Forma:

function closeCadastroUsuario() {       
    if(document.getElementById("formCadastroUsuario:messageCadastroUsuario") == null) {
        RichFaces.hideModalPanel('modalPanelCadastroUsuario');       
    }    
}

No Código eu só estou tentando validar o campo Nome para validar o resto. Meu FirstnameValidator está abaixo.


public class FirstnameValidator implements Validator {

    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        String nome = value.toString();

        if (nome.equals("")) {
            FacesMessage msg = new FacesMessage();
            msg.setDetail("Campo Nome está em Branco! Prencha o Campo Nome!");
            msg.setSummary("Campo Nome está em Branco! Prencha o Campo Nome!");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ValidatorException(msg);
        }

    }
}

O faces-config.xml está com o validator Firstname Declarado, e acredito que a função do action (que não tem nada) está executando, porém o javascript e o validator não. Quando eu coloco a tag required=“true” dentro o h:inputText id=“firstname” ele mostra o erro no h:messages.

Fico no aguardo e agradeço desde já!

Você usar o required true da seguinte maniera:

Coloque o required true no seu campo:

 &lt;h:inputText value=&quot;#{userFaces.user.vchUserFirstname}&quot; id=&quot;firstname&quot;  required=&quot;true&quot;  requiredMessage=&quot;Campo Obrigatório&quot; /&gt;  

Desta forma acho acho que resolve o problema.
Qualquer coisa posta ai.

Funcionou sim. Eu gostaria de utilizar o validator não só pra required mais pra outras coisas como tamanho, login já existe, a senha e a confirmação da senha igual.

Porém não estou conseguindo fazer o validator do inputText executar e nem forçar um exceção pra aparecer o erro.

Agradeço desde Já!

Você concorda comigo que para fazer estas validações que mencionou o usuário tem que preencher o login.
Então faça assim:

   .&lt;h:inputText value="#{userFaces.user.vchUserFirstname}" id="firstname"  required="true"  requiredMessage="Campo Obrigatório" &gt;    
&lt;f:validator validatorId="FirstnameValidator"/&gt;  

&lt;/h:inputText&gt;

Pode fazer isso se o campo estiver preenchido o jsf chama o validador.