[ww] type conversion com i18n e l10n

Gostaria de saber a forma de conciliar type conversion (input data) com i18n e l10n no webwork. A dúvida é na conversão automática de entrada pois posso ter valores:

1,234.44 (en_US) 1.234,44 (pt_BR)
O conversor automático trabalha com en_US mas e com outros locales?

(e aí webwork specialist*, como resolve isso? :smiley: )

[size=9]*smota[/size]

Bem, acho que a melhor solução aqui é um javascript para mascarar os dados conforme o locale.

Ooopa … Samuca na parada … o problema de nomear a pergunta é que se o caboclo nao souber fica ruim pra ele :oops:

Algumas considerações importantes:
O set das propriedade na action são feitos todos pelo parameter interceptor e a conversão dos tipos fica por conta do suporte no OGNL que infelizmente não trata locale, entonces qualquer solução será uma gambiarra :lol:

A ActionContext tem um getLocale (use ActionContext.getContext().getLocale()) que retorna o locale baseado no que esta setado no browser … vc pode chama-lo a qualquer hora em um interceptor seu (se usar o interceptor de localização coloque-o depois dele) e fazer as devidas conversões … ou seja, compare o locale de entrada do usuário e caso ele tenha separadores diferentes faça os replaces devidos ANTES da chamada dos demais interceptors (para exibir corretamente veja isto aqui!)

eheheh, pela demora essa msg tá recheada de links pra vc brincar :wink:

no ww 2.1.7 vc pode colocar o webwork.locale no webwork.properties… antes isto nao funcionava. Vai funcionar só i18n, entao o ww:text funciona…

mas como o smota disse para conversão de tipos a ognl não usa locale…

acho que para o Date vai funcionar pq é um conversor do ww mesmo…

Relax, vc tem muito crédito por aqui. :smiley:

[quote=smota]Algumas considerações importantes:
O set das propriedade na action são feitos todos pelo parameter interceptor e a conversão dos tipos fica por conta do suporte no OGNL que infelizmente não trata locale, entonces qualquer solução será uma gambiarra :lol: [/quote]
É exatamente sobre esta gambiarra que eu estava me referindo… só não sabia se tinha jeito de fazer sem gambi. Acho que prefiro uma regex no javascript pra consistir o campo conforme o locale.

Vou considerar essa alternativa, porém acho que terei mais dor de cabeça com isso do que com a o javascript. Caso mude de idéia, ainda não sei como eu poderia fazer replace nos parâmetros do request? Quanto a saida de informações já tinha resolvido (estou usando o interceptor i18n, acabei fazendo um e só depois ví que tinha pronto no site).

:?: A única dúvida que ficou é quanto a mexer nos parâmetros do request.
Samuel e Ricardo, obrigado pelos esclarecimentos

Estou tendo problemas com a visualização formatada de datas utilizando isto aqui. Não sei se o problema é com velocity pois não estou utilizando jsp.

Action propertie’s file:last.date=A data é {0,date,dd/MM/yyyy HH:mm}

velocity template:#bodytag(I18n "name='br.com.atmtec.core.SystemAction'") #tag(Text "'name=last.date'" "value0=$action.getLastDate()") #end

exception: 10:27:58,593 WARN OgnlValueStack:146 - Caught an exception while evaluating expression 'texts('br.com.atmtec.core.SystemAction')' against value stack java.lang.NullPointerException at com.opensymphony.xwork.util.CompoundRootAccessor.callMethod(CompoundRootAccessor.java:130) at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:819) at ognl.ASTMethod.getValueBody(ASTMethod.java:75) at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:171) at ognl.SimpleNode.getValue(SimpleNode.java:193) at ognl.Ognl.getValue(Ognl.java:333) at ognl.Ognl.getValue(Ognl.java:310) at com.opensymphony.xwork.util.OgnlValueStack.findValue(OgnlValueStack.java:142) at com.opensymphony.webwork.views.jsp.WebWorkTagSupport.findValue(WebWorkTagSupport.java:56) at com.opensymphony.webwork.views.jsp.I18nTag.doStartTag(I18nTag.java:50) at com.opensymphony.webwork.views.velocity.AbstractTagDirective.processTag(AbstractTagDirective.java:296) at com.opensymphony.webwork.views.velocity.AbstractTagDirective.render(AbstractTagDirective.java:122) at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:153) at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:271) at org.apache.velocity.Template.merge(Template.java:296) at com.opensymphony.webwork.dispatcher.VelocityResult.doExecute(VelocityResult.java:91) at com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport.java:109) at com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:263) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:187) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.intercept(DefaultWorkflowInterceptor.java:55) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at br.com.atmtec.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:55) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:115) at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:272) at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:237) at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at com.opensymphony.webwork.lifecycle.RequestLifecycleFilter.doFilter(RequestLifecycleFilter.java:67) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:793) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:702) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:571) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:644) at java.lang.Thread.run(Unknown Source) ...