Bom eu sou a favor de validação do lado do cliente, logico que a validação do servidor é que realmente importa, a validação do lado cliente evita que o usuário envie um formulário incompleto, para o servidor validar e retornar a mensagem(requered="" do jsf) de erro, se poder evitar este processo é muito melhor devido o baixo trafico de informações na rede sem contar que o sistema ficará mais rapido nas validações.
Porem a validação do lado cliente, javascript, pode ser manipulado pelo usuário, atraves de ferramentas de desenvolvedores que são instaladas nos browsers para inspecionar uma pagina. Mas mesmo assim este processo é viavel já que não são todos os usuarios que podem manipular o javascript do site, e mesmo se o usuario manipular existe( deve existir) a validação do lado do servidor.
Eu utilizo o JQuery + puglin JQuery.Validade para validar os inputs de cadastro do meu sistema, evitando chamandas para o servidor desnecessarias.
Exemplo de como eu uso:
<body onload='loadValidate()'>//necessario para carregar a o plugin validade do JQuery
<rich:form id="frm">
<h:outputLabel id="lblNome">Nome:
<h:inputText id="txtNome" value=#{md.cliente.nome}"/>
</h:outputLabel>
<br/>
<a4j:commandButton id="btnSalvar" action="#{md.salvar}" value="Salvar" onclick="if(validaForm()==false) return;"
</rich:form>
A função javascript que valida meu form é ‘validaForm’ lá eu consigo fazer qualquer validação da minha tela, eu utilizo o plugin validate do JQuery e não tenho nenhum problemas para validar via JS…
function loadValidate(){
var $j = jQuery.noConflict();
$j("#frm").validate({
rules: {
'frm:txtNome': { required: true, minlength: 2 }
},
messages: {
'frm:txtNome': { required: "Escreva o nome do Cliente.", minlength: jQuery.format("O nome deve ter no minimo {0} caracteres") },
success: function(label) {
label.html(" ").addClass("checked");// set as text for IE
},
submitHandler: function(form) {
return;
}
});
}
function validateForm(){
var $j = jQuery.noConflict();
if(!$j("#frm").validate().form())
return false;
return true;
}
Assim é possível validar qualquer formulário no jsf e ainda estou utilizando um plugin do JQuery que no inicio pensei que iria ter problemas devido ao nome gerados pelo jsf para os inputs mais é possível utilizar até mesmo o jquery para obter os inputs usando escape… ex:
escapeJsfIdToJQuery = function(id){
return "#"+id.replace(/:/g\"\\:");
}
//usando em qualquer função para obter os inputs atraves do JQuery
var $j = jQuery.noConflict();
$j(escapeJsfIdToJQuery ('frm:txtNome')).val('Valor do input');
espero ter ajudado… flw