Velocity

Ola a todos…

Estou comecando a trabalhar com o velocity associado ao struts… No struts conseguia fazer a validacao no lado do cliente usando e no velocity como fazer esta validacao no lado do cliente via script ? tentei usar a classe org.apache.velocity.tools.struts.ValidatorTool com o seguinte comando no template $validator.getJavascript mas ele joga o javascript na pagina sem tag sem nada…

Estou tendo q gerar script via arquivo .properties uma solucao meio feia se tem ferramentas para tal…

Abraco a todos
Obrigado

vc declarou o ValidatorTool no toolbox.xml ?

colocou onsubmit=“return validateNomeForm(this)” na form?

toolbox.xml

<tool>
   <key>validator</key>
   <scope>request</scope>
   <class>org.apache.velocity.tools.struts.ValidatorTool</class>
 </tool>
<form name="velocityForm" method="POST" action="../velocity.do" onsubmit="return validateVelocityForm(this)">
// input e submit
</form>
$validator.getJavascript("velocityForm")

qualquer problema estamos ai :slight_smile:

Para que é que usou javascript? eu crio validações em velocity+struts e não precisei de usar nada disso, bastou implementar o metodo validator na class e configurar a action de maneira a que ele vá a esse metodo… depois só tenho que ver no velocity se ele retorna errors ou não…

voce pode fazer assim, mas deste jeito a validação é executada no lado servidor. Eu uso isto quando as validacões são mais complexas.

para validacões simples, como required, integer, date, email, ou com expressões regulares, vc pode usar o javascript se quiser… fica mais simples.

[quote=“ricardolecheta”]voce pode fazer assim, mas deste jeito a validação é executada no lado servidor. Eu uso isto quando as validacões são mais complexas.

para validacões simples, como required, integer, date, email, ou com expressões regulares, vc pode usar o javascript se quiser… fica mais simples.[/quote]

Então pessoal… antes de mais nada gostaria de agradecer pela ajuda…
Estava faltando mesmo o “onsubmit=return validade…”
Resolvi fazer esta validação para não comprometer o trafego de informação barrando possiveis erros antes de chegar ao server… não deixando de fazer a validação no lado do servidor…

Obrigado!!!

[quote=broering][quote=“ricardolecheta”]voce pode fazer assim, mas deste jeito a validação é executada no lado servidor. Eu uso isto quando as validacões são mais complexas.

para validacões simples, como required, integer, date, email, ou com expressões regulares, vc pode usar o javascript se quiser… fica mais simples.[/quote]

Então pessoal… antes de mais nada gostaria de agradecer pela ajuda…
Estava faltando mesmo o “onsubmit=return validade…”
Resolvi fazer esta validação para não comprometer o trafego de informação barrando possiveis erros antes de chegar ao server… não deixando de fazer a validação no lado do servidor…

até aí beleza, ele adiciona todas as funcões para validação. mas quando executo o submit ele dá um erro de script:

Linha: 282 Caractere: 9 Erro: 'documentacaoForm_required' não esta definido Codigo: 0 URL: http://localhost:8080/estudo/gestao/documentacao.vm

Obrigado!!![/quote]

Estou tentando fazer funcionar a validação do lado cliente dessa maneira, mas não estou conseguindo, pois está ocorrendo um erro de execução do JavaScript.

Configurei todo corretamente como indicado:

toolbox.xml:

<tool> <key>validator</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.ValidatorTool</class> </tool>

na minha template coloquei o form:

<FORM name="documentacaoForm" action="$link.setAction('/gestao/documentacaoAction')" method="post" onsubmit="return validateDocumentacaoForm(this)">

que é o nome do form-bean no arquivo de configuração do struts:

<form-bean name="documentacaoForm"

e no final da template adicionei:

$validator.getJavascript("documentacaoForm")

Linha: 282 Caractere: 9 Erro: 'documentacaoForm_required' não esta definido Codigo: 0 URL: http://localhost:8080/estudo/gestao/documentacao.vm

quando abro a linha 282 do arquivo cai exatamente neste código:

oRequired = eval('new ' + formName.value + '_required()');

da funcao que valida os campos requireds:

    function validateRequired(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name");

        oRequired = eval('new ' + formName.value + '_required()');

        for (x in oRequired) {
            var field = form[oRequired[x][0]];

            if ((field.type == 'hidden' ||
                field.type == 'text' ||
                field.type == 'textarea' ||
                field.type == 'file' ||
                field.type == 'checkbox' ||
                field.type == 'select-one' ||
                field.type == 'password') &&
                field.disabled == false) {

                var value = '';
                // get field's value
                if (field.type == "select-one") {
                    var si = field.selectedIndex;
                    if (si >= 0) {
                        value = field.options[si].value;
                    }
                } else if (field.type == 'checkbox') {
                    if (field.checked) {
                        value = field.value;
                    }
                } else {
                    value = field.value;
                }

                if (trim(value).length == 0) {

                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oRequired[x][1];
                    isValid = false;
                }
            } else if (field.type == "select-multiple") { 
                var numOptions = field.options.length;
                lastSelected=-1;
                for(loop=numOptions-1;loop>=0;loop--) {
                    if(field.options[loop].selected) {
                        lastSelected = loop;
                        value = field.options[loop].value;
                        break;
                    }
                }
                if(lastSelected < 0 || trim(value).length == 0) {
                    if(i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oRequired[x][1];
                    isValid=false;
                }
            } else if ((field.length > 0) && (field[0].type == 'radio' || field[0].type == 'checkbox')) {
                isChecked=-1;
                for (loop=0;loop < field.length;loop++) {
                    if (field[loop].checked) {
                        isChecked=loop;
                        break; // only one needs to be checked
                    }
                }
                if (isChecked < 0) {
                    if (i == 0) {
                        focusField = field[0];
                    }
                    fields[i++] = oRequired[x][1];
                    isValid=false;
                }
            }
        }
        if (fields.length > 0) {
           focusField.focus();
           alert(fields.join('\n'));
        }
        return isValid;
    }

esta função é gerada pelo velocity validator.

e parece que este “_required()” indica os campos que ele vai validar, será que faltou alguma coisa?

Desculpe ressucitar um post tao antigo, mas nao achei nada solucionando na web (vugo google) entao resolvi postar ali.

O erro formName_required acontece quando o nome do form nao é o mesmo do FormBean. Ou seja, o nome do form tem q ser exatamente o mesmo do utilizado para fazer a chamada do javascript de validacao.

$validator.getJavascript("FormBean")
<FORM name="FormBean" onsubmit="return validateFormBean(this);"  method="POST" action="$link.setAction('/cadastraUsuario')">...

um problema comumente encontrado é que o usuario nao atenta para o Case Sensitive.

Boa Sorte !