[RESOLVIDO] Vraptor 3 - Tratamento de tipo de objeto da view

Olá pessoal gostaria de saber com tratar erro de tipo de obejeto da view.

Tratar datas(27/09/2010),valor decimal(1.000,00).

Li o material dos conversores mas não entendi como aplicar.

vlw

Você não trata nada, quem faz isso é o Vraptor.

Basta você adicionar no seu web.xml:

[code]
br.com.caelum.vraptor.packages
br.com.caelum.vraptor.converter.l10n

javax.servlet.jsp.jstl.fmt.locale pt_BR [/code]

E no seu código basta você receber os valores com o tipo correto:

public void foo(Date nascimento) { [...] }

Opa!
Para converter os números vc pode adicionar ao seu web.xml esta configuração:

<context-param>  
     <param-name>br.com.caelum.vraptor.packages</param-name>      
     <param-value>br.com.caelum.vraptor.converter.l10n</param-value>  
 	</context-param>  

Na JSP vc pode colocar uma máscara JQuery para que os valores sejam digitados 27/10/2010 e 25.000,00, lembrando que vc deve usar jstl na JSP:

// formatando Moeda
<input id="real" name="produto.valor" type="text" value="<fmt:formatNumber value="${produto.valor}" minFractionDigits="2"/>"  />

// formatando Data
<input id="data" name="produto.dataInclusao" type="text" value="<fmt:formatDate pattern='dd/MM/yyyy' value="${produto.dataInclusao }"/>"/></input>

Abraço!

[quote=Guevara]Opa!
Para converter os números vc pode adicionar ao seu web.xml esta configuração:

<context-param>  
     <param-name>br.com.caelum.vraptor.packages</param-name>      
     <param-value>br.com.caelum.vraptor.converter.l10n</param-value>  
 	</context-param>  

Na JSP vc pode colocar uma máscara JQuery para que os valores sejam digitados 27/10/2010 e 25.000,00, lembrando que vc deve usar jstl na JSP:

// formatando Moeda
<input id="real" name="produto.valor" type="text" value="<fmt:formatNumber value="${produto.valor}" minFractionDigits="2"/>"  />

// formatando Data
<input id="data" name="produto.dataInclusao" type="text" value="<fmt:formatDate pattern='dd/MM/yyyy' value="${produto.dataInclusao }"/>"/></input>

Abraço!

[/quote]
Ok
com fmt tratamos o retorno certo?
Como tratar o valor com virgula enviado?
ex. 10,00 o vraptor converte para 10.00?

se vc estiver com o locale pt_BR, sim

Coloquei no web.xml mas não está convertendo.

vc chegou a adicionar isso no web.xml?

<context-param>    
     <param-name>br.com.caelum.vraptor.packages</param-name>        
     <param-value>br.com.caelum.vraptor.converter.l10n</param-value>    
    </context-param> 

[quote=Lucas Cavalcanti]vc chegou a adicionar isso no web.xml?

<context-param> <param-name>br.com.caelum.vraptor.packages</param-name> <param-value>br.com.caelum.vraptor.converter.l10n</param-value> </context-param> [/quote]

Adicionei.
Quando eu envio no log não aparece nada sobre converter.
Não precisa anotar nada na classe?

cuidado que o final é L dez N, e não cento e dez N

habilita o log de debug do vraptor, e veja se ao iniciar a aplicação aparece algum converter do pacote br.com.caelum.vraptor.converter.l10n…

de qqer forma, qual é o tipo que o produto.setValor() recebe?

[quote=Lucas Cavalcanti]cuidado que o final é L dez N, e não cento e dez N

habilita o log de debug do vraptor, e veja se ao iniciar a aplicação aparece algum converter do pacote br.com.caelum.vraptor.converter.l10n…

de qqer forma, qual é o tipo que o produto.setValor() recebe?[/quote]

No log está scanneando

13:50:51,897 DEBUG [ComponentScanner    ] scanning [br.com.caelum.vraptor.converter.l10n]
13:50:51,908  INFO [DefaultListableBeanFactory] Overriding bean definition for bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor': replacing [Root bean: class [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] with [Root bean: class [br.com.caelum.vraptor.ioc.spring.InjectionBeanPostProcessor]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null]
13:50:51,915 DEBUG [VRaptorApplicationContext] Bean factory for Root WebApplicationContext: org.springframework.beans.factory.support.DefaultListableBeanFactory@1ba614a: defining beans [XStreamXMLDeserializer,asmBasedTypeCreator,defaultConverters,objenesisProxifier,defaultMultipartConfig,encodingHandlerFactory,defaultAcceptHeaderToFormat,defaultRouter,defaultTypeNameExtractor,defaultDeserializers,defaultRoutes,defaultTypeFinder,defaultMethodNotAllowedHandler,defaultResourceTranslator,defaultResourceNotFoundHandler,pathAnnotationRoutesParser,defaultInterceptorRegistry,emptyElementsRemoval,noRoutesConfiguration,paranamerNameProvider,stereotypeHandler,converterHandler,interceptorStereotypeHandler,deserializesHandler,stereotypedBeansRegistrar,defaultSpringLocator,applicationConfiguration,downloadInterceptor,defaultResult,defaultRepresentationResult,defaultRefererResult,multipartInterceptor,XStreamJSONSerialization,jstlLocalization,deserializingInterceptor,XStreamXMLSerialization,forwardToDefaultViewInterceptor,flashInterceptor,defaultValidator,parametersInstantiatorInterceptor,defaultStatus,defaultValidationViewsFactory,executeMethodInterceptor,emptyResult,defaultPageResult,ognlParametersProvider,defaultPathResolver,replicatorOutjector,defaultLogicResult,instantiateInterceptor,defaultFormatResolver,defaultHttpResult,defaultMethodInfo,interceptorListPriorToExecutionExtractor,resourceLookupInterceptor,outjectResult,bigDecimalConverter,bigIntegerConverter,booleanConverter,byteConverter,characterConverter,doubleConverter,enumConverter,floatConverter,integerConverter,localeBasedCalendarConverter,localeBasedDateConverter,longConverter,primitiveBooleanConverter,primitiveByteConverter,primitiveCharConverter,primitiveDoubleConverter,primitiveFloatConverter,primitiveIntConverter,primitiveLongConverter,primitiveShortConverter,shortConverter,uploadedFileConverter,VRaptorRequestProvider,httpServletRequestProvider,httpServletResponseProvider,httpSessionProvider,localDateConverter,localTimeConverter,defaultInterceptorStack,defaultRequestExecution,categoriasController,cepController,familiasController,fornecedoresController,multiEansController,nfEntradaController,nutricaoController,parametrosController,produtosController,receitasController,usuariosController,categoriaDao,cstADao,divisaoDao,embCompraDao,embRecebimentoDao,embVendaDao,familiaDao,figuraFiscalDao,grupoDao,impostoDao,logbairroDao,log_faixa_ufDao,log_logradouroDao,lojaDao,marcaDao,multiEanDao,nutricaoDao,pisCofinsDao,produtoDao,produtoEanDao,produtoLojaDao,produtoPesadoDao,produtoRapidoDao,receitaDao,secaoDao,setorCustoDao,setorDao,subGrupoDao,tipoEmbalagemDao,tipoProdutoDao,usuarioDao,criadorDeSession,criadorDeSessionFactory,autorizacaoInterceptor,usuarioWeb,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.aop.config.internalAutoProxyCreator,cacheBasedTypeCreator]; root of factory hierarchy
13:50:52,289 DEBUG [VRaptorApplicationContext] Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@1a6b028]
13:50:52,292 DEBUG [VRaptorApplicationContext] Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org.springframework.context.event.SimpleApplicationEventMulticaster@772046]
13:50:52,303  INFO [DefaultListableBeanFactory] Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1ba614a: defining beans [XStreamXMLDeserializer,asmBasedTypeCreator,defaultConverters,objenesisProxifier,defaultMultipartConfig,encodingHandlerFactory,defaultAcceptHeaderToFormat,defaultRouter,defaultTypeNameExtractor,defaultDeserializers,defaultRoutes,defaultTypeFinder,defaultMethodNotAllowedHandler,defaultResourceTranslator,defaultResourceNotFoundHandler,pathAnnotationRoutesParser,defaultInterceptorRegistry,emptyElementsRemoval,noRoutesConfiguration,paranamerNameProvider,stereotypeHandler,converterHandler,interceptorStereotypeHandler,deserializesHandler,stereotypedBeansRegistrar,defaultSpringLocator,applicationConfiguration,downloadInterceptor,defaultResult,defaultRepresentationResult,defaultRefererResult,multipartInterceptor,XStreamJSONSerialization,jstlLocalization,deserializingInterceptor,XStreamXMLSerialization,forwardToDefaultViewInterceptor,flashInterceptor,defaultValidator,parametersInstantiatorInterceptor,defaultStatus,defaultValidationViewsFactory,executeMethodInterceptor,emptyResult,defaultPageResult,ognlParametersProvider,defaultPathResolver,replicatorOutjector,defaultLogicResult,instantiateInterceptor,defaultFormatResolver,defaultHttpResult,defaultMethodInfo,interceptorListPriorToExecutionExtractor,resourceLookupInterceptor,outjectResult,bigDecimalConverter,bigIntegerConverter,booleanConverter,byteConverter,characterConverter,doubleConverter,enumConverter,floatConverter,integerConverter,localeBasedCalendarConverter,localeBasedDateConverter,longConverter,primitiveBooleanConverter,primitiveByteConverter,primitiveCharConverter,primitiveDoubleConverter,primitiveFloatConverter,primitiveIntConverter,primitiveLongConverter,primitiveShortConverter,shortConverter,uploadedFileConverter,VRaptorRequestProvider,httpServletRequestProvider,httpServletResponseProvider,httpSessionProvider,localDateConverter,localTimeConverter,defaultInterceptorStack,defaultRequestExecution,categoriasController,cepController,familiasController,fornecedoresController,multiEansController,nfEntradaController,nutricaoController,parametrosController,produtosController,receitasController,usuariosController,categoriaDao,cstADao,divisaoDao,embCompraDao,embRecebimentoDao,embVendaDao,familiaDao,figuraFiscalDao,grupoDao,impostoDao,logbairroDao,log_faixa_ufDao,log_logradouroDao,lojaDao,marcaDao,multiEanDao,nutricaoDao,pisCofinsDao,produtoDao,produtoEanDao,produtoLojaDao,produtoPesadoDao,produtoRapidoDao,receitaDao,secaoDao,setorCustoDao,setorDao,subGrupoDao,tipoEmbalagemDao,tipoProdutoDao,usuarioDao,criadorDeSession,criadorDeSessionFactory,autorizacaoInterceptor,usuarioWeb,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.aop.config.internalAutoProxyCreator,cacheBasedTypeCreator]; root of factory hierarchy
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
13:50:55,010 DEBUG [VRaptorApplicationContext] Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [org.springframework.context.support.DefaultLifecycleProcessor@d0cdd0]
13:50:55,085  INFO [DefaultConverters   ] Registering bundled converters
13:50:55,085 DEBUG [DefaultConverters   ] bundled converter to be registered: class br.com.caelum.vraptor.converter.BigDecimalConverter
13:50:55,085 DEBUG [DefaultConverters   ] bundled converter to be registered: class br.com.caelum.vraptor.converter.BigIntegerConverter
13:50:55,085 DEBUG [DefaultConverters   ] bundled converter to be registered: class br.com.caelum.vraptor.converter.BooleanConverter
13:50:55,085 DEBUG [DefaultConverters   ] bundled converter to be registered: class br.com.caelum.vraptor.converter.ByteConverter
13:50:55,085 DEBUG [DefaultConverters   ] bundled converter to be registered: class br.com.caelum.vraptor.converter.CharacterConverter
13:50:55,085 DEBUG [DefaultConverters   ] bundled converter to be registered: class br.com.caelum.vraptor.converter.DoubleConverter

Quando adiciono passa os valores como estão na view(ex.1,1)

qual é o tipo que o produto.setValor() recebe?

Double

e que valor é colocado no produto.getValor()?

1,1

então não entendi qual é o problema… o valor não está correto?

Como tratar o valor que vem da view converter 1,1 para 1.1 e setar.

o VRaptor faz isso automaticamente…

faça na sua lógica:

System.out.println(produto.getValor());

o que ele imprime?

[quote=Lucas Cavalcanti]o VRaptor faz isso automaticamente…

faça na sua lógica:

System.out.println(produto.getValor());

o que ele imprime?[/quote]

Ele imprimi 0.0

tire a configuração do l10n, e crie essa classe:

@Convert(Double.class)
public class CustomDoubleConverter extends Converter<Double> {
     public Double convert(String value, ....) {
          if (value == null || "".equals(value)) return 0.0;
          return Double.valueOf(value.replace(".", "").replace(",", "."));
     }
}

imports de br.com.caelum.vraptor

[quote=Lucas Cavalcanti]tire a configuração do l10n, e crie essa classe:

@Convert(Double.class)
public class CustomDoubleConverter extends Converter<Double> {
     public Double convert(String value, ....) {
          if (value == null || "".equals(value)) return 0.0;
          return Double.valueOf(value.replace(".", "").replace(",", "."));
     }
}

imports de br.com.caelum.vraptor[/quote]
Ficou assim mais não converteu.
Por que a configuração do web.xml não funcionou ja que chega a inicializar conforme o log?

[code]
import java.text.MessageFormat;
import java.util.ResourceBundle;

import br.com.caelum.vraptor.Convert;
import br.com.caelum.vraptor.Converter;
import br.com.caelum.vraptor.converter.ConversionError;

@Convert(Double.class)
public class CustomDoubleConverter implements Converter{
public Double convert(String value, Class<? extends Double> type, ResourceBundle bundle) {
if (value == null || value.equals("")) {
return null;
}
try {
return Double.parseDouble( value.replace(".","").replace(",",".") );
} catch (NumberFormatException e) {
throw new ConversionError(MessageFormat.format(bundle.getString(“is_not_a_valid_number”), value));
}
}
}[/code]