Bom eu estou desenvolvendo um projeto pequeno aonde eu faço faculdade e comecei a utilizar o VRaptor + Hibernate.
Eu gostaria de saber qual a melhor forma de validação utilizando esses dois frameworks.
Por exemplo
Quero adicionar um produto no banco.
Tenho as validações na página normalmente mas preciso validar tbm no camada de negócio, se por exemplo, existe algum produto com o mesmo nome.
Qual a melhor forma de realizar isso? Caso o usuário tenha digitado um nome que já existe deve aparecer um alert na página informando isso.
Agradeço a paciẽncia !
Opa!
Eu li a documentação sim… até acompanho ela.
Mas queria saber se existe modo melhor do que aquelas regras no controle.
Essa validação Ajax como é? Tem como da um exemplo ou indicar um link?
Abraços
Vitor Morales
vc pode fazer a sua!
de qualquer forma vc terá que fazer no controller… ou delegar pra uma outra camada que vai ter que retornar pro controller!
mas qual o problema de fazer no controller?
por ajax vc faria assim
vc manda o objeto e verifica no controller… vc faria + - assim
Ajax:
$("inputDoNomeDoProduto").blur(function(){
var produto = {
"produto.nome" : $("#idDoInput").val();
}
$.ajax({
url: "produtos/valida",
type: "POST",
data : produto,
dataType: "application/json",
success : function(data){
// faz alguma coisa se der certo
},
error : function () {
// faz a lógica dependendo do status...
}
});
});
})
Controller:
public class ProdutoController{
private Result result;
public ProdutoController(Result result){
this.result = result;
}
@Get("/produtos/valida")
public void validaProduto(Produto produto){
//valida da forma que vc achar melhor
//aqui tem várias formas...
// retornar true ou false
result.use(Results.json).from(expressãoBooleana).serialize();
// ou tb se não tiver o produto devolve um status 200
result.nothing();
// e se tem o nome daquele produto lança uma exceção
}
}
Acho que esse modo vai resolver meu problema. Mas gostaria que fosse algo assim.
Ao enviar o formulário eu faço um monte de validação via javascript como se os campos estão no formato válido etc …
Gostaria uma requisição ajax que chamasse o método pra adicionar o produto e neste método tem as validações do tipo se já existe.
Caso tenha sucesso ou erro eu devo retornar uma mensagem específica pra tela e mostrar num alert por exemplo sem que seja necessário recarregar a página.
Como faria isso de um modo limpo ?
Eu implemento no .submit() do formulário umas validações javascript mesmo, mas necessito dessa lógica de validação também na camada da aplicação.
Agradeço a paciência ai !
Caso puderem dar um exemplo simples ou enviar alguma página que contenha um exemplo melhor ainda !
vc pode fazer por ajax msm! o exemplo que te dei funciona para o seu caso! ou não?
por exemplo… se vc quer validar se o login de um usuário já foi cadastrado… no envento onblur do seu input vc teria um evento
e nele teria uma função ajax que bateria no controller e o controller te retornaria uma resposta de que achou ou não esse nome no banco! ou qualquer outra lógica de validação que vc precisar!
É mais ou menos isso …
Mas como eu faço pra retornar um mensagem de erro do controlador pra página ?
Do tipo … dentro do método de adição possui alguns validações e pra cada validação eu preciso retornar uma mensagem diferente.
Como faço isso ?
e eu tenho essas validações javascript que não foram feitas por mim … como integraria isso dentro da função ajax submit ?
$('#newNetworkForm').submit(function() {
//Validações antes de executar o comando final
if($("#nomeRede").val() == ""){
$('#nomeRede').css('border','red solid 1px');
alert("Digite um nome");
$('#nomeRede').focus();
return false;
}
else
if($("#localRede").val() == ""){
$('#localRede').css('border','red solid 1px');
alert("Digite um Local");
$('#localRede').focus();
return false;
}
else
if($("#ipRede").val() == ""){
$('#ipRede').css('border','red solid 1px');
alert("Digite um IP");
$('#ipRede').focus();
return false;
}
else
if($("#mascaraRede").val() == ""){
$('#mascaraRede').css('border','red solid 1px');
alert("Digite uma Máscara");
$('#mascaraRede').focus();
return false;
}
else
//Validação de Ip e Mask
if(validarIP($("#ipRede").val()) == false){
alert("Digite um IP válido");
$("#ipRede").val("");
$("#ipRede").focus();
return false;
}
else
if(validarIP($("#mascaraRede").val()) == false){
alert("Digite uma Máscara válida");
$("#mascaraRede").val("");
$("#mascaraRede").focus();
return false;
}
else
if((validarIP($("#gatewayRede").val()) == false))
{
alert("Digite um Gateway válido.");
$("#gatewayRede").val("");
$("#gatewayRede").focus();
return false;
}
$("#ipRede").val(ip2long($("#ipRede").val()));
$("#mascaraRede").val(ip2long($("#mascaraRede").val()));
$("#gatewayRede").val(ip2long($("#gatewayRede").val()));
});
Sem que eu precise redirecionar ou recarregar a página até pq a navegação tbm ta via ajax.
Ao clicar num item do menu ele carregar uma outra página dentro de um div na página principal
O meu formulário agora envio via ajax e faço as validações dentro do metodo addNetwork.
Mas como eu retorno uma mensagem de erro dessa forma pra ser exibido no error: do ajax ?