ErrorMessage[RESOLVIDO]  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
Lita Mclean
JavaChild
[Avatar]

Membro desde: 11/12/2009 10:55:58
Mensagens: 143
Offline

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!

This message was edited 1 time. Last update was at 22/02/2010 16:37:46

Lita Mclean
JavaChild
[Avatar]

Membro desde: 11/12/2009 10:55:58
Mensagens: 143
Offline

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 :
<div id="body">
<div id="menu">
<ul>
<li><a href="<c:url value="/produtos/formulario"/>">Novo Produto</a></li>
<li><a href="<c:url value="/produtos/lista"/>">Lista Produtos</a></li>
</ul>
</div>

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?
henriquejhc
JavaEvangelist

Membro desde: 19/02/2009 20:34:47
Mensagens: 308
Offline

Oi, posso estar errado mas nessa linha :

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.



Não foram os pregos que seguraram CRISTO na cruz, mas o AMOR Dele por você e por mim.
Lita Mclean
JavaChild
[Avatar]

Membro desde: 11/12/2009 10:55:58
Mensagens: 143
Offline

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

Membro desde: 19/02/2009 20:34:47
Mensagens: 308
Offline

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.


Não foram os pregos que seguraram CRISTO na cruz, mas o AMOR Dele por você e por mim.
Lita Mclean
JavaChild
[Avatar]

Membro desde: 11/12/2009 10:55:58
Mensagens: 143
Offline

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
GUJ Master
[Avatar]

Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline

vc injetou o validator no seu controller?
[Email] [MSN]
Lita Mclean
JavaChild
[Avatar]

Membro desde: 11/12/2009 10:55:58
Mensagens: 143
Offline

"injetou"???...desculpa mas como assim?
zoren
GUJ Master
[Avatar]

Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline

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
[Email] [MSN]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6394
Offline

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:



pra corrigir é só fazer:


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

This message was edited 1 time. Last update was at 18/02/2010 16:41:47


--
Caelum
www.caelum.com.br

Lita Mclean
JavaChild
[Avatar]

Membro desde: 11/12/2009 10:55:58
Mensagens: 143
Offline

@Resource
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<Produto> 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
GUJ Master
[Avatar]

Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline

Tira o modificador final dos atributos da classe

do validator, result e do DAO
[Email] [MSN]
Lita Mclean
JavaChild
[Avatar]

Membro desde: 11/12/2009 10:55:58
Mensagens: 143
Offline

tirei os modificadores mas continua dando erro :

br.com.caelum.vraptor.InterceptionException: java.lang.NoClassDefFoundError: net/vidageek/mirror/dsl/Mirror
zoren
GUJ Master
[Avatar]

Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline

Agora vc tem q colocar no seu classpath o jar do Mirror
[Email] [MSN]
Lita Mclean
JavaChild
[Avatar]

Membro desde: 11/12/2009 10:55:58
Mensagens: 143
Offline

zoren add....agora não dá erro...mas também não aparece a mensagem de erro só continua na mesma página!!!
 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team