galera criei uma classe conforme a apostila do caleum fj-28, com o método:
publicvoidadiciona(finalProdutoproduto){if(produto.getNome()==null||produto.getNome().length()<3){validator.add(newValidationMessage("Nome é obrigatório e precisa ter mais de 3 letras","produto.nome"));}if(produto.getDescricao()==null||produto.getDescricao().length()>40){validator.add(newValidationMessage("Descrição é obrigatória não pode ter mais de 40 letras","produto.descricao"));}if(produto.getPreco()<=0){validator.add(newValidationMessage("Preço precisa ser positivo","produto.preco"));}validator.onErrorUse(page()).of(ProdutosController.class).formulario();dao.salva(produto);result.redirectTo(ProdutosController.class).lista();}
caso a pessoa não digitasse nada(ou algum valor incorreto) era para aparecer uma mensagem de erro, coisa que não esta fazendo,aparece o erro:
Caused by: java.lang.NullPointerException
at br.com.caelum.goodbuy.controller.ProdutosController.adiciona(ProdutosController.java:37)
obs; eu acho que o erro esta vindo do método adiciona,não tenho certeza
Você verifica se é igual a null e depois tenta verificar o tamanho.
Se for null vai NullPointerException.
(Não testei, logo não posso afirmar que seja isso)
Espero ter ajudado.
L
Lita_Mclean
desculpa mas não entendi exatamente o que vc quis dizer!!!
H
henriquejhc
Se o seu atributo nome for null você não pode verficar o tamanho, porque ele não existe.
Acho que primeiro você deveria verificar se é diferente de null. Se for diferente de null dai sim você verifica o tamanho.
Espero ter ajudado.
L
Lita_Mclean
então tentei fazer isso que vc disse, mas continua dando erro:
br.com.caelum.vraptor.InterceptionException: java.lang.NullPointerException
.
.
.
java.lang.NullPointerException br.com.caelum.goodbuy.controller.ProdutosController.adiciona(ProdutosController.java:37)
ProdutosController.java:37 seria essa linha no meu código:
o vraptor faz injeção de dependência pelo construtor
então é só vc informar que vai receber o validator no seu construtor
vc colocou o validator no seu construtor??
coloca o controller inteiro aqui, mas dentro das tags code
Lucas_Cavalcanti
quando vc não passa nenhuma informação do produto na requisição (não preencheu o formulário, por exemplo), o vraptor vai passar um produto nulo no seu método:
PS: Lita, coloque os códigos que vc postar entre [code] e [/ code] (sem o espaço dentro da tag), assim fica mais fácil de ler
L
Lita_Mclean
<aclass="mention" href="/u/resource">@Resource</a>public class ProdutosController {private final ProdutoDao dao;private final Result result;private final Validator validator; public ProdutosController(ProdutoDao dao, Result result, Validator validator){this.dao=dao;this.result=result;this.validator=validator;}public void adiciona(final Produto produto){ if(produto.getNome()==null||produto.getNome().length()<3){validator.add(new ValidationMessage(“Nome é obrigatório e precisa ter mais de 3 letras”,“produto.nome”));}if(produto.getDescricao()==null||produto.getDescricao().length()>40){validator.add(new ValidationMessage(“Descrição é obrigatória não pode ter mais de 40 letras”,“produto.descricao”));}if(produto.getPreco()<=0){validator.add(new ValidationMessage(“Preço precisa ser positivo”,“produto.preco”));}validator.onErrorUse(page()).of(ProdutosController.class).formulario();dao.salva(produto);result.redirectTo(ProdutosController.class).lista();} public void formulario(){ }public List lista(){return dao.listaTudo();}public Produto edita(Long id){return dao.carrega(id);}public void altera(Produto produto){dao.atualiza(produto);result.redirectTo(ProdutosController.class).lista();}public void remove(Long id){Produto produto=dao.carrega(id);dao.remove(produto);result.redirectTo(ProdutosController.class).lista();}}
zoren
Tira o modificador final dos atributos da classe
do validator, result e do DAO
L
Lita_Mclean
tirei os modificadores mas continua dando erro:( :
Agora vc tem q colocar no seu classpath o jar do Mirror
L
Lita_Mclean
zoren add…agora não dá erro…mas também não aparece a mensagem de erro só continua na mesma página!!!
zoren
add??
zoren
Não entendi oq vc quis dizer com add,
Mas, quanto a não aparecer erro nenhum, vc criou o arquivo messages??
edit:
ata saquei, vc colocou o jar no classpath
G
garcia-jj
henriquejhc, o que a Lita fez está correto sim, acho que você se enganou:
Se isso OU isso. Ou seja, nunca dará NullPointerException aqui.
Lita, já que agora nenhuma mensagem de erro aparece, e tudo que você consegue nos passar é que está ficando na mesma tela, acho que só um debug para entender o que está acontecendo.
Então pergunto: o que seria ficar na mesma tela? Essa mesma tela por acaso é a ProdutosController.formulario? Caso sim então o validar está fazendo certo, pois você diz que quando dá erro deve ir para o formulário.
Você verifica se é igual a null e depois tenta verificar o tamanho.
Se for null vai NullPointerException.
(Não testei, logo não posso afirmar que seja isso)
Espero ter ajudado.
Camarada você precisa estudar um pouco mais lógica de programação, pois se for tentar ajudar alguém com uma resposta errada é melhor nem tentar…
Em nenhum momento ocorreria o erro mencionado por você, pois no IF esta sendo utilizado o OR ||, sendo assim, quando a primeira condição estiver VERDADEIRA ele não irá testar a segunda condição, ou seja, não irá testar a outra condição após o OR ||, só iria testar se fosse utilizado o AND &&.
Tome cuidado para não direcionar a pessoa para um erro ainda maior.
H
henriquejhc
Caro softwork. Me desculpa por não ser tão bom quanto você. Mas se você souber ler vai ver que eu postei…
Eu disse que podia estar errado.
Sou um simples estagiário, e ainda não sei tudo o que um Analista e Desenvolvedor Sênior como você sabe.
Eu queria apenas ajudar e nenhum momento disse que resolveria o problema dela.
E você, veio até aqui postou uma mensagem chamando minha atenção. Ok, eu estava errado. Mas você tentou ajudar a resolver o problema?
Não quero gerar brigas, pois acho que o GUJ é um fórum de pessoas adultas e profissionais.
Vou estudar mais uns 10 anos e quando estiver pronto talvez eu consiga voltar a postar e ajudar alguém.
Peço desculpas a todos aqueles que eu direcionei para um erro ainda maior.
Peço desculpas também aos moderadores e aos administradores se disse algo que tenha quebrado alguma regra do GUJ.
Abraço a todos.
Lucas_Cavalcanti
henriquejhc, obrigado por ter ajudado a resolver a dúvida… isso ajuda você e as outras pessoas a entenderem o problema… não faz mal errar, todo mundo erra.
e como dizia o velho ditado, não alimente os trolls…
L
Lita_Mclean
já consegui…valew
L
Lita_Mclean
gente desculpa pela demora em responder…então o problema estava no meu jspf , mas na parte onde eu estava colocando e nos jsp que eu tive que colocar:
utilizando o UTF-8 estava dando erro…(não sei o por que), mas agora a mesnagem de erro esta aparecendo normalmente!!!