ErrorMessage[RESOLVIDO]

24 respostas
L

galera criei uma classe conforme a apostila do caleum fj-28, com o método:

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();
}

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

alguém saberia me dizer o motivo do erro???

obrigada!

24 Respostas

L

ah esqueci de informar no header.jspf que fica na pasta webContent, coloquei a seguinte informação:

<div id="erros">
	<ul>
	<c:forEach items="${errors}" var="error">
	<li>${error.category}-${error.message}</li>
	</c:forEach>
	</ul>
</div>

mas acho que o header.jspf esta no local errado por que, seguindo a postila fala para colocar :




  • <a href="<c:url value="/produtos/formulario"/>">Novo Produto

  • <a href="<c:url value="/produtos/lista"/>">Lista Produtos


dentro do header.jspf e o certo era aparecer Novo produto e Lista de produtos…na web mas não esta aparecendo

alguém tem alguma dica?

H

Oi, posso estar errado mas nessa linha :

if(produto.getNome()==null||produto.getNome().length()&lt;3){ 
   .................
}

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

desculpa mas não entendi exatamente o que vc quis dizer!!!

H

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

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:

validator.onErrorUse(page()).of(ProdutosController.class).formulario();

zoren

vc injetou o validator no seu controller?

L

“injetou”???..desculpa mas como assim?

zoren

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:

public void adiciona(final Produto produto){ 
   //se eu não digitei nada no formulário, produto == null!!!
   //por isso o NullPointerException abaixo:
   if (produto.getNome() ......)
}
pra corrigir é só fazer:
public void adiciona(final Produto produto){ 
   if (produto == null) {
       validator.add(....);
   } else {
       //outras validações
   }
   validator.onErrorUse(...)
   //resto do 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
<a class="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

tirei os modificadores mas continua dando erro:( :

br.com.caelum.vraptor.InterceptionException: java.lang.NoClassDefFoundError: net/vidageek/mirror/dsl/Mirror

zoren

Agora vc tem q colocar no seu classpath o jar do Mirror

L

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

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.

validator.onErrorUse(page()).of(ProdutosController.class).formulario(); dao.salva(produto); result.redirectTo(ProdutosController.class).lista();

Ramon.Onix

Lita, está tudo certo agora, ele tem que mostrar a mesma página pra te mostrar os erros…

Veja se está colocando o header.jspf nas suas páginas, lá no web.xml vc tem que colocar isso aki:

<jsp-config> <jsp-property-group> <display-name>Todos Jsp's</display-name> <url-pattern>*.jsp</url-pattern> <page-encoding>UTF-8</page-encoding> <include-prelude>/header.jspf</include-prelude> <include-coda>/rodape.jspf</include-coda> </jsp-property-group> </jsp-config>

vc tem um arquivo “[nome do arquivo].css”?

softwork

henriquejhc:
Oi, posso estar errado mas nessa linha :

if(produto.getNome()==null||produto.getNome().length()&lt;3){ 
   .................
}

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

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

já consegui…valew

L

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!!!

obrigada gente

L

estranho mas agora uzandoo o UTF-8 eu consegui :?

valeu gente

Criado 18 de fevereiro de 2010
Ultima resposta 22 de fev. de 2010
Respostas 24
Participantes 7