Guevara 1 de nov. de 2010
Poste o método completo pra ver melhor onde está o problema.
[]s
tompereira 1 de nov. de 2010
Está é a classe de controle do produto .
package br.com.AromaNaWeb.controller ;
//import?s
import br.com.AromaNaWeb.dao.* ;
import br.com.AromaNaWeb.modelo.Produto ;
import br.com.caelum.vraptor.Validator ;
import java.util.List ;
import br.com.caelum.vraptor.Resource ;
import br.com.caelum.vraptor.Result ;
import br.com.caelum.vraptor.validator.ValidationMessage ;
@Resource
public class ProdutosController {
private final ProdutoDao dao ;
private Validator validator ;
public ProdutosController ( ProdutoDao dao , Result result , Validator validator ) {
this . dao = dao ;
this . validator = validator ;
}
public List < Produto > lista () {
return dao . listaTudo ();
}
public void adiciona ( final Produto produto ) {
// ESTÁ DANDO ERRO NESTA PARTE
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 que 40 letras" ,
"produto.descricao" ));
}
if ( produto . getPreco () <= 0 ) {
validator . add ( new ValidationMessage (
"Preço precisa ser positivo" , "produto.preco" ));
}
validator . onErrorUsePageOf ( ProdutosController . class ). adiciona ( produto );
dao . salva ( produto );
//verificar por que o redirectTo abaixo não funciona .
//result.redirectTo(ProdutosController.class).lista();
}
public void formulario () {
}
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 );
}
}
O validator está sendo inplementado no metodo adicionar .
Guevara 1 de nov. de 2010
Tenta assim:
public void adiciona ( final Produto produto ) {
validator . checking ( new Validations () {
{
that ( ! produto . getDescricao (). isEmpty (), "produto.descricao" ,
"descricaoProduto.obrigatorio" );
that ( ! produto . getDescricao (). length () > 40 ), "produto.descricaoTamanho" ,
"descricaoTamanhoProduto.obrigatorio" );
that ( ! produto . getPreco () <= 0 , "produto.precoInvalido" ,
"precoProduto.invalido" );
that ( produto . getPreco () != null , "produto.preco" ,
"precoProduto.obrigatorio" );
}
});
validator . onErrorRedirectTo ( this ). adiciona ( produto );
dao . salva ( produto );
result . use ( Results . logic ()). redirectTo ( ProdutoController . class ). lista ();
}
E lá no seu messages.properties adiciona as mensagens de erro pro usuario ver na jsp:
descricaoProduto .obrigatorio = Informe a descri ção do produto
descricaoTamanhoProduto .obrigatorio = Informe uma descri ção com menos de 40 caracteres
precoProduto .invalido = Pre ço deve ser maior que zero
precoProduto .obrigatorio = Informe um pre ço para o produto
Abraço!
tompereira 1 de nov. de 2010
onde coloco este arquivo message.propeties ? :oops:
Guevara 1 de nov. de 2010
Coloca na sua /src, o nome é “messages.properties”.
tompereira 1 de nov. de 2010
o eclipse esta apresentando um erro de configuração de build path…
Guevara 1 de nov. de 2010
Que erro é esse? Vc colocou todos os jars necessários na sua /lib?
tompereira 1 de nov. de 2010
sim coloquei, o erro que tá acontecendo é
“the type org.hamcrest.Matcher cannot be resolved. it s indiretly referenced from requerid .class file”
Guevara 1 de nov. de 2010
Vc possui o hamcrest-all-1.3RC0.jar na sua /lib? Se não tiver, vá na pasta do VRaptor que vc baixou e veja se está na pasta “optional”, se não estiver lá, baixa da internet esse jar e coloque na /lib:
https://code.google.com/p/hamcrest/downloads/detail?name=hamcrest-all-1.3RC0.jar&can=2&q=
Dê um “refresh” no seu projeto, depois tente novamente.
tompereira 1 de nov. de 2010
ok tentei os erros foram corrigidos o projeto foi compilado mais na hora de executar lança essa exception abaixo :
br .com .caelum .vraptor .InterceptionException : exception raised , check root cause for details : java .lang .NullPointerException
br .com .caelum .vraptor .interceptor .ExecuteMethodInterceptor .intercept ( ExecuteMethodInterceptor .java :86 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ExceptionHandlerInterceptor .intercept ( ExceptionHandlerInterceptor .java :69 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .LazyInterceptorHandler .execute ( LazyInterceptorHandler .java :61 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ParametersInstantiatorInterceptor .intercept ( ParametersInstantiatorInterceptor .java :90 )
br .com .caelum .vraptor .core .LazyInterceptorHandler .execute ( LazyInterceptorHandler .java :59 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .InstantiateInterceptor .intercept ( InstantiateInterceptor .java :42 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .InterceptorListPriorToExecutionExtractor .intercept ( InterceptorListPriorToExecutionExtractor .java :44 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .FlashInterceptor .intercept ( FlashInterceptor .java :81 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ResourceLookupInterceptor .intercept ( ResourceLookupInterceptor .java :67 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :56 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .DefaultRequestExecution .execute ( DefaultRequestExecution .java :70 )
br .com .caelum .vraptor .VRaptor $1 .insideRequest ( VRaptor .java :92 )
br .com .caelum .vraptor .ioc .spring .SpringProvider .provideForRequest ( SpringProvider .java :56 )
br .com .caelum .vraptor .VRaptor .doFilter ( VRaptor .java :89 )
root cause
java .lang .NullPointerException
br .com .AromaNaWeb .controller .ProdutosController .adiciona ( ProdutosController .java :41 )
sun .reflect .NativeMethodAccessorImpl .invoke0 ( Native Method )
sun .reflect .NativeMethodAccessorImpl .invoke ( Unknown Source )
sun .reflect .DelegatingMethodAccessorImpl .invoke ( Unknown Source )
java .lang .reflect .Method .invoke ( Unknown Source )
br .com .caelum .vraptor .interceptor .ExecuteMethodInterceptor .intercept ( ExecuteMethodInterceptor .java :57 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ExceptionHandlerInterceptor .intercept ( ExceptionHandlerInterceptor .java :69 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .LazyInterceptorHandler .execute ( LazyInterceptorHandler .java :61 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ParametersInstantiatorInterceptor .intercept ( ParametersInstantiatorInterceptor .java :90 )
br .com .caelum .vraptor .core .LazyInterceptorHandler .execute ( LazyInterceptorHandler .java :59 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .InstantiateInterceptor .intercept ( InstantiateInterceptor .java :42 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .InterceptorListPriorToExecutionExtractor .intercept ( InterceptorListPriorToExecutionExtractor .java :44 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .FlashInterceptor .intercept ( FlashInterceptor .java :81 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ResourceLookupInterceptor .intercept ( ResourceLookupInterceptor .java :67 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :56 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .DefaultRequestExecution .execute ( DefaultRequestExecution .java :70 )
br .com .caelum .vraptor .VRaptor $1 .insideRequest ( VRaptor .java :92 )
br .com .caelum .vraptor .ioc .spring .SpringProvider .provideForRequest ( SpringProvider .java :56 )
br .com .caelum .vraptor .VRaptor .doFilter ( VRaptor .java :89 )
note The full stack trace of the root cause is available in the Apache Tomcat / 6 .0 .29 logs .
aparentemente é de objeto nulo mas eu não consigo resolver …
Guevara 1 de nov. de 2010
No editor do Eclipse, habilite o “show line numbers”, e poste a linha 41 do seu ProdutoController:
Veja tb como vc está mandando os parâmetros na JSP, poste o seu form tb, está chegando null lá.
tompereira 1 de nov. de 2010
o erro está neste trecho
validator.checking( new Validations()
A classe toda e essa ai o metodo adiciona verifica e grava as informações mas quem chama o formulario é o metodo formulario , lembrando que não estou tambem conseguindo redirecionar de uma jsp para outra
package br.com.AromaNaWeb.controller ;
//import?s
import br.com.AromaNaWeb.dao.* ;
import br.com.AromaNaWeb.modelo.Produto ;
import br.com.caelum.vraptor.Validator ;
import java.util.List ;
import br.com.caelum.vraptor.Resource ;
import br.com.caelum.vraptor.Result ;
import br.com.caelum.vraptor.validator.ValidationMessage ;
import br.com.caelum.vraptor.validator.Validations ;
import br.com.caelum.vraptor.view.Results ;
@Resource
public class ProdutosController {
private final ProdutoDao dao ;
private Validator validator ;
private Result result ;
public ProdutosController ( ProdutoDao dao , Result result ) {
this . dao = dao ;
this . validator = validator ;
}
public List < Produto > lista () {
return dao . listaTudo ();
}
//verificar por que o redirectTo abaixo não funciona .
//result.redirectTo(ProdutosController.class).lista();
public void adiciona ( final Produto produto ) {
validator . checking ( new Validations () {
{ that ( ! produto . getDescricao (). isEmpty (), "produto.descricao" ,
"descricaoProduto.obrigatorio" );
that ( ! ( produto . getDescricao (). length () > 40 ), "produto.descricaoTamanho" ,
"descricaoTamanhoProduto.obrigatorio" );
that ( ! ( produto . getPreco () <= 0 ), "produto.precoInvalido" ,
"precoProduto.invalido" );
that ( produto . getPreco () != null , "produto.preco" ,
"precoProduto.obrigatorio" );
}
});
validator . onErrorRedirectTo ( this ). adiciona ( produto );
dao . salva ( produto );
result . use ( Results . logic ()). redirectTo ( ProdutosController . class ). lista ();
}
public void formulario () {
}
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 );
}
e segue o form abaixo :
<% @ page language = "java" contentType = "text/html; charset=ISO-8859-1"
pageEncoding = "ISO-8859-1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=ISO-8859-1" >
< title > Insert title here</ title >
</ head >
< body >
< form action = "adiciona" >
< fieldset >
< legend > Adicionar Produto</ legend >
< label for = "nome" > Nome:</ label >
< input id = "nome" type = "text" name = "produto.nome" value = "${produto.nome }" />
< label for = "descricao" > Descrição:</ label >
< textarea id = "descricao" name = "produto.descricao" > ${produto.descricao }</ textarea >
< label for = "preco" > Preço:</ label >
< input id = "preco" type = "text" name = "produto.preco" value = "${produto.preco }" />
< button type = "submit" > Enviar</ button >
</ fieldset >
</ form >
</ body >
</ html >
é isso ai se vc quiser envio o war com o projeto completo para vc por email .
Guevara 1 de nov. de 2010
Cometi um erro, no seu método adiciona em caso de erro têm que voltar pro formulário e não o próprio método:
validator.onErrorRedirectTo(this).formulario();
No browser vc chama o formulario assim:
http://localhost:8080/aromanaweb/produtos/formulario
Ou se colocou com Maiúsculas no começo:
http://localhost:8080/AromaNaWeb/produtos/formulario
Sendo que o certo seria td minúsculo.
Se ele conseguir adicionar o produto vai pro método lista(), deixe assim:
public void lista () {
result .include ( "produtos" , dao .listaTudo ()) ;
}
tompereira 1 de nov. de 2010
agora ta aparecendo o mesmo erro mas so que referencia as linhas 47 e 42
at br.com.AromaNaWeb.controller.ProdutosController$1.<init>(ProdutosController.java:47)
at br.com.AromaNaWeb.controller.ProdutosController.adiciona(ProdutosController.java:42)
que são respectivamente :
// este é o erro 47
that ( !( produto . getPreco () < = 0 ), "produto.precoInvalido" ,
"precoProduto.invalido" );
// e este é o erro 42
validator . checking ( new Validations () {
Segue resultado .
Guevara 1 de nov. de 2010
O atributo preço deve ser do tipo BigDecimal na classe Produto.
tompereira 1 de nov. de 2010
agora restou o da linha 42 ta apontando para está linha .
validator.checking( new Validations() {
este é a exception completa
br .com .caelum .vraptor .InterceptionException : exception raised , check root cause for details : java .lang .NullPointerException
br .com .caelum .vraptor .interceptor .ExecuteMethodInterceptor .intercept ( ExecuteMethodInterceptor .java :86 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ExceptionHandlerInterceptor .intercept ( ExceptionHandlerInterceptor .java :69 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .LazyInterceptorHandler .execute ( LazyInterceptorHandler .java :61 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ParametersInstantiatorInterceptor .intercept ( ParametersInstantiatorInterceptor .java :90 )
br .com .caelum .vraptor .core .LazyInterceptorHandler .execute ( LazyInterceptorHandler .java :59 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .InstantiateInterceptor .intercept ( InstantiateInterceptor .java :42 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .InterceptorListPriorToExecutionExtractor .intercept ( InterceptorListPriorToExecutionExtractor .java :44 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .FlashInterceptor .intercept ( FlashInterceptor .java :81 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ResourceLookupInterceptor .intercept ( ResourceLookupInterceptor .java :67 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :56 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .DefaultRequestExecution .execute ( DefaultRequestExecution .java :70 )
br .com .caelum .vraptor .VRaptor $1 .insideRequest ( VRaptor .java :92 )
br .com .caelum .vraptor .ioc .spring .SpringProvider .provideForRequest ( SpringProvider .java :56 )
br .com .caelum .vraptor .VRaptor .doFilter ( VRaptor .java :89 )
root cause
java .lang .NullPointerException
br .com .AromaNaWeb .controller .ProdutosController .adiciona ( ProdutosController .java :42 )
sun .reflect .NativeMethodAccessorImpl .invoke0 ( Native Method )
sun .reflect .NativeMethodAccessorImpl .invoke ( Unknown Source )
sun .reflect .DelegatingMethodAccessorImpl .invoke ( Unknown Source )
java .lang .reflect .Method .invoke ( Unknown Source )
br .com .caelum .vraptor .interceptor .ExecuteMethodInterceptor .intercept ( ExecuteMethodInterceptor .java :57 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ExceptionHandlerInterceptor .intercept ( ExceptionHandlerInterceptor .java :69 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .LazyInterceptorHandler .execute ( LazyInterceptorHandler .java :61 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ParametersInstantiatorInterceptor .intercept ( ParametersInstantiatorInterceptor .java :90 )
br .com .caelum .vraptor .core .LazyInterceptorHandler .execute ( LazyInterceptorHandler .java :59 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .InstantiateInterceptor .intercept ( InstantiateInterceptor .java :42 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .InterceptorListPriorToExecutionExtractor .intercept ( InterceptorListPriorToExecutionExtractor .java :44 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .FlashInterceptor .intercept ( FlashInterceptor .java :81 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ResourceLookupInterceptor .intercept ( ResourceLookupInterceptor .java :67 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :56 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .DefaultRequestExecution .execute ( DefaultRequestExecution .java :70 )
br .com .caelum .vraptor .VRaptor $1 .insideRequest ( VRaptor .java :92 )
br .com .caelum .vraptor .ioc .spring .SpringProvider .provideForRequest ( SpringProvider .java :56 )
br .com .caelum .vraptor .VRaptor .doFilter ( VRaptor .java :89 )
note The full stack trace of the root cause is available in the Apache Tomcat / 6 .0 .29 logs .
--------------------------------------------------------------------------------
Guevara 1 de nov. de 2010
Se o seu preço é BigDecimal, tente fazer a verificação assim:
that(!(produto.getPreco().compareTo(BigDecimal.ZERO) <= 0, "produto.precoInvalido", "precoProduto.invalido");
tompereira 1 de nov. de 2010
infelismente continua dando o erro no trecho abaixo
validator.checking(new Validations() {
vc tem gmail para eu te enviar o projeto completo para vc ver para mim ? pois o projeto tem 16 mb.
Guevara 1 de nov. de 2010
Infelizmente não é possível por email, use o fórum para obter ajuda.
Confira se o seu método está assim.
public void adiciona ( final Produto produto ) {
validator . checking ( new Validations () {
{
that ( ! produto . getDescricao (). isEmpty (), "produto.descricao" , "descricaoProduto.obrigatorio" );
that ( ! produto . getDescricao (). length () > 40 ), "produto.descricaoTamanho" , "descricaoTamanhoProduto.obrigatorio" );
that ( ! ( produto . getPreco (). compareTo ( BigDecimal . ZERO ) <= 0 , "produto.precoInvalido" , "precoProduto.invalido" );
that ( produto . getPreco () != null , "produto.preco" , "precoProduto.obrigatorio" );
}
});
validator . onErrorRedirectTo ( this ). formulario ();
dao . salva ( produto );
result . use ( Results . logic ()). redirectTo ( ProdutoController . class ). lista ();
}
Pare o server Tomcat, clique com o direito no server e dê um “clean”, depois dê um start do Tomcat novamente
tompereira 1 de nov. de 2010
está dando o mesmo erro no validation ta reconhecendo exception nulo …
cara eu coloquei o projeto la no skydriver da microsoft o link é http://cid-758ca680486ddf11.office.live.com/browse.aspx/.Public?uc=1
se puder me ajuda ou souber de alguem que possa …
So tenho a agradecer pela ajuda que vc me prestou até agora , muito obrigado mesmo …
Guevara 1 de nov. de 2010
Faltou um parâmetro no seu form:
<form action="adiciona" method="post">
tompereira 1 de nov. de 2010
arrumei o post mas ainda esta o mesmo erro … tentei achar mas não consegui …
Guevara 1 de nov. de 2010
Salva o método adiciona ou comenta ele e usa este aqui:
public void adiciona ( final Produto produto ) {
if ( ! produto . getDescricao (). isEmpty ()) {
validator . add ( new ValidationMessage ( "Informe uma descrição" , "produto.descricao" ));
}
if ( ! produto . getDescricao (). length () > 40 ) {
validator . add ( new ValidationMessage ( "O produto deve ter menos que 40 caracteres" , "produto.descricaoTamanho" ));
}
if ( ! ( produto . getPreco (). compareTo ( BigDecimal . ZERO ) <= 0 ) {
validator . add ( new ValidationMessage ( "O preço deve ser maior que zero" , "produto.precoInvalido" ));
}
if ( produto . getPreco () != null ) {
validator . add ( new ValidationMessage ( "Informe o preço do produto" , "produto.preco" ));
}
validator . onErrorRedirectTo ( this ). formulario ();
dao . salva ( produto );
result . use ( Results . logic ()). redirectTo ( ProdutoController . class ). lista ();
}
Lucas_Cavalcanti 1 de nov. de 2010
vc precisa receber o Validator no construtor…
vc fez um this.validator = validator, mas não recebeu o validator no construtor.
tompereira 1 de nov. de 2010
agora é neste trecho do metodo que vc me passou que está dando o erro
validator.add(new ValidationMessage( "Informe uma descrição","produto.descricao"));
O erro é o mesmo …
Guevara 1 de nov. de 2010
Confere aí:
public class ProdutosController {
private ProdutoDao dao ;
private Validator validator ;
private Result result ;
public ProdutosController ( ProdutoDao dao , Result result , Validator validator ) {
this .dao = dao ;
this .validator = validator ;
this .result = result ;
// restante do c ódigo
Lucas_Cavalcanti 1 de nov. de 2010
ainda tá dando nullPointer?
seu construtor está assim?
public XXXController(...., Validator validator) {
//...
this.validator = validator;
}
tompereira 1 de nov. de 2010
sim arrumei desse jeito passando o parametro do validator no construtor , limpei o projeto , e mandei compilar de novo e não funcionou, e tambem os redirects não estão funcionando .
como por exemplo
result.redirectTo(ProdutosController.class).lista();
dá erro
Lucas_Cavalcanti 1 de nov. de 2010
qual erro?
vc tá com a última versão do VRaptor?
tompereira 1 de nov. de 2010
sim 3.2 , se vc quiser verificar meu projeto deixei o link acima
Lucas_Cavalcanti 1 de nov. de 2010
tompereira 1 de nov. de 2010
br .com .caelum .vraptor .InterceptionException : exception raised , check root cause for details : java .lang .NoClassDefFoundError : Could not initialize class net .sf .cglib .proxy .Enhancer
br .com .caelum .vraptor .interceptor .ExecuteMethodInterceptor .intercept ( ExecuteMethodInterceptor .java :86 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ExceptionHandlerInterceptor .intercept ( ExceptionHandlerInterceptor .java :69 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .LazyInterceptorHandler .execute ( LazyInterceptorHandler .java :61 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ParametersInstantiatorInterceptor .intercept ( ParametersInstantiatorInterceptor .java :90 )
br .com .caelum .vraptor .core .LazyInterceptorHandler .execute ( LazyInterceptorHandler .java :59 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .InstantiateInterceptor .intercept ( InstantiateInterceptor .java :42 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .InterceptorListPriorToExecutionExtractor .intercept ( InterceptorListPriorToExecutionExtractor .java :44 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .FlashInterceptor .intercept ( FlashInterceptor .java :81 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ResourceLookupInterceptor .intercept ( ResourceLookupInterceptor .java :67 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :56 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .DefaultRequestExecution .execute ( DefaultRequestExecution .java :70 )
br .com .caelum .vraptor .VRaptor $1 .insideRequest ( VRaptor .java :92 )
br .com .caelum .vraptor .ioc .spring .SpringProvider .provideForRequest ( SpringProvider .java :56 )
br .com .caelum .vraptor .VRaptor .doFilter ( VRaptor .java :89 )
root cause
java .lang .NoClassDefFoundError : Could not initialize class net .sf .cglib .proxy .Enhancer
br .com .caelum .vraptor .proxy .AbstractCglibProxifier .enhanceTypeWithCGLib ( AbstractCglibProxifier .java :46 )
br .com .caelum .vraptor .proxy .ObjenesisProxifier .proxify ( ObjenesisProxifier .java :31 )
br .com .caelum .vraptor .view .DefaultValidationViewsFactory .instanceFor ( DefaultValidationViewsFactory .java :65 )
br .com .caelum .vraptor .validator .DefaultValidator .onErrorUse ( DefaultValidator .java :86 )
br .com .caelum .vraptor .validator .AbstractValidator .onErrorRedirectTo ( AbstractValidator .java :51 )
br .com .AromaNaWeb .controller .ProdutosController .adiciona ( ProdutosController .java :56 )
sun .reflect .NativeMethodAccessorImpl .invoke0 ( Native Method )
sun .reflect .NativeMethodAccessorImpl .invoke ( Unknown Source )
sun .reflect .DelegatingMethodAccessorImpl .invoke ( Unknown Source )
java .lang .reflect .Method .invoke ( Unknown Source )
br .com .caelum .vraptor .interceptor .ExecuteMethodInterceptor .intercept ( ExecuteMethodInterceptor .java :57 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ExceptionHandlerInterceptor .intercept ( ExceptionHandlerInterceptor .java :69 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .LazyInterceptorHandler .execute ( LazyInterceptorHandler .java :61 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ParametersInstantiatorInterceptor .intercept ( ParametersInstantiatorInterceptor .java :90 )
br .com .caelum .vraptor .core .LazyInterceptorHandler .execute ( LazyInterceptorHandler .java :59 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .InstantiateInterceptor .intercept ( InstantiateInterceptor .java :42 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .InterceptorListPriorToExecutionExtractor .intercept ( InterceptorListPriorToExecutionExtractor .java :44 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .FlashInterceptor .intercept ( FlashInterceptor .java :81 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .interceptor .ResourceLookupInterceptor .intercept ( ResourceLookupInterceptor .java :67 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :54 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .ToInstantiateInterceptorHandler .execute ( ToInstantiateInterceptorHandler .java :56 )
br .com .caelum .vraptor .core .DefaultInterceptorStack .next ( DefaultInterceptorStack .java :53 )
br .com .caelum .vraptor .core .DefaultRequestExecution .execute ( DefaultRequestExecution .java :70 )
br .com .caelum .vraptor .VRaptor $1 .insideRequest ( VRaptor .java :92 )
br .com .caelum .vraptor .ioc .spring .SpringProvider .provideForRequest ( SpringProvider .java :56 )
br .com .caelum .vraptor .VRaptor .doFilter ( VRaptor .java :89 )
note The full stack trace of the root cause is available in the Apache Tomcat / 6 .0 .29 logs .
Este erro acima esta dando quando executo este redirecionamento abaixo :
result.redirectTo(ProdutosController.class).lista();
Lucas_Cavalcanti 1 de nov. de 2010
vc tah com qual jar do cglib no classpath? Tem mais de um?
o certo é deixar o que está no VRaptor: o cglib-nodep-2.1._3.jar
Guevara 1 de nov. de 2010
Lucas, aquele método que vc me passou para validar uma busca parou de funcionar, era pra barrar uma busca vazia, embora a validação funcione, uma busca sem preencher nada retorna todos os registros do banco. Como o autor do tópico está levando NPE em relação a validação desconfio que o validator está problemas… "/
tompereira 1 de nov. de 2010
estava com o 2.1 arrumei este ai o 2.1._3 e vou testar o projeto novamente …
Lucas_Cavalcanti 1 de nov. de 2010
o problema não é no validator, pelo menos não parece ser.
na sua lógica de validação, Guevara, tinha vários casos possíveis de nullPointer que vc não estava evitando
tompereira 1 de nov. de 2010
agora este codigo
result.redirectTo(ProdutosController.class).lista();
está dando o erro abaixo :
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request .
exception
br . com . caelum . vraptor . InterceptionException : exception raised , check root cause for details : java . lang . NullPointerException
br . com . caelum . vraptor . interceptor . ExecuteMethodInterceptor . intercept ( ExecuteMethodInterceptor . java : 86 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 54 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . interceptor . ExceptionHandlerInterceptor . intercept ( ExceptionHandlerInterceptor . java : 69 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 54 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . core . LazyInterceptorHandler . execute ( LazyInterceptorHandler . java : 61 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . interceptor . ParametersInstantiatorInterceptor . intercept ( ParametersInstantiatorInterceptor . java : 90 )
br . com . caelum . vraptor . core . LazyInterceptorHandler . execute ( LazyInterceptorHandler . java : 59 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . interceptor . InstantiateInterceptor . intercept ( InstantiateInterceptor . java : 42 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 54 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . interceptor . InterceptorListPriorToExecutionExtractor . intercept ( InterceptorListPriorToExecutionExtractor . java : 44 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 54 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . interceptor . FlashInterceptor . intercept ( FlashInterceptor . java : 81 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 54 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . interceptor . ResourceLookupInterceptor . intercept ( ResourceLookupInterceptor . java : 67 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 54 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 56 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . core . DefaultRequestExecution . execute ( DefaultRequestExecution . java : 70 )
br . com . caelum . vraptor . VRaptor $ 1 . insideRequest ( VRaptor . java : 92 )
br . com . caelum . vraptor . ioc . spring . SpringProvider . provideForRequest ( SpringProvider . java : 56 )
br . com . caelum . vraptor . VRaptor . doFilter ( VRaptor . java : 89 )
root cause
java . lang . NullPointerException
br . com . AromaNaWeb . controller . ProdutosController . adiciona ( ProdutosController . java : 58 )
sun . reflect . NativeMethodAccessorImpl . invoke0 ( Native Method )
sun . reflect . NativeMethodAccessorImpl . invoke ( Unknown Source )
sun . reflect . DelegatingMethodAccessorImpl . invoke ( Unknown Source )
java . lang . reflect . Method . invoke ( Unknown Source )
br . com . caelum . vraptor . interceptor . ExecuteMethodInterceptor . intercept ( ExecuteMethodInterceptor . java : 57 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 54 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . interceptor . ExceptionHandlerInterceptor . intercept ( ExceptionHandlerInterceptor . java : 69 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 54 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . core . LazyInterceptorHandler . execute ( LazyInterceptorHandler . java : 61 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . interceptor . ParametersInstantiatorInterceptor . intercept ( ParametersInstantiatorInterceptor . java : 90 )
br . com . caelum . vraptor . core . LazyInterceptorHandler . execute ( LazyInterceptorHandler . java : 59 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . interceptor . InstantiateInterceptor . intercept ( InstantiateInterceptor . java : 42 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 54 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . interceptor . InterceptorListPriorToExecutionExtractor . intercept ( InterceptorListPriorToExecutionExtractor . java : 44 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 54 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . interceptor . FlashInterceptor . intercept ( FlashInterceptor . java : 81 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 54 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . interceptor . ResourceLookupInterceptor . intercept ( ResourceLookupInterceptor . java : 67 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 54 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 56 )
br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 53 )
br . com . caelum . vraptor . core . DefaultRequestExecution . execute ( DefaultRequestExecution . java : 70 )
br . com . caelum . vraptor . VRaptor $ 1 . insideRequest ( VRaptor . java : 92 )
br . com . caelum . vraptor . ioc . spring . SpringProvider . provideForRequest ( SpringProvider . java : 56 )
br . com . caelum . vraptor . VRaptor . doFilter ( VRaptor . java : 89 )
note The full stack trace of the root cause is available in the Apache Tomcat / 6.0.29 logs .
--------------------------------------------------------------------------------
Lucas_Cavalcanti 1 de nov. de 2010
a linha:
br.com.AromaNaWeb.controller.ProdutosController.adiciona(ProdutosController.java:58)
é a que vc passou?
result.redirectTo(ProdutosController.class).lista();
se sim, vê se o result está sendo inicializado corretamente. Algo como, no construtor da classe:
public ProdutosController(Result result, ....) {
this.result = result;
//...
}
Guevara 1 de nov. de 2010
Nossa, tive que usar o StringUtils tb para outros dois atributos que são String, era esse o problema, o isEmpty() não vai nem por um decreto. Resolvi aqui.
tompereira 1 de nov. de 2010
apareceu a mensagem de erro do validator , so que agora so fica na mensagem toda hora , mas eu vou tentar ver isto aqui pois o erro principal já foi resolvido , muito obrigado pela ajuda e atenção de vocês …
Guevara 1 de nov. de 2010
Tenta usar o validator no estilo Clássico e Fluente:
http://vraptor.caelum.com.br/documentacao/validacao/
O primeiro que mandei é o Fluente e usa o messages.properties.
Aí é só acertar os detalhes.
tompereira 1 de nov. de 2010
Agora sim ficou perfeito obrigado …
Guevara 1 de nov. de 2010
Não esqueça do [Resolvido] editando o seu primeiro post. =)
tompereira 2 de nov. de 2010
como que eu faço para mostrar que ta resolvido
Guevara 2 de nov. de 2010
É só visualizar a sua primeira postagem neste tópico, ao lado terá um botão “editar”, clique nele e edite o título do tópico, colocando o [Resolvido].
tompereira 2 de nov. de 2010
Ok obrigado , agora vou continuar ralando aqui, estou fazendo uma loja virtual , mas nunca tinha programado com java para web por isto estou apanhando …