Usando-se o locale pt_BR nas requisições do browser, o struts 2 formata valores do tipo Date() certinho de acordo com o locale definido no browser do usuário… Mas no que diz respeito a double e float o separador decimal é sempre um ponto e não uma vírgula como deveria ser no Brasil. Na realidade já mudei o locale do browser para diversos outros idiomas que também usam vírgula como separador decimal e as respostas continuam as mesmas…
Só para ter uma idéia de como estou fazendo os testes, criei uma classe Teste.class:
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class Teste extends ActionSupport {
private double f1 = 123.4;
private Date data = new Date();
public String vamove(){
return "vamove";
}
public double getF1() {
return f1;
}
public void setF1(double f1) {
this.f1 = f1;
}
public Date getData() {
return data;
}
public void setData(Date data) {
this.data = data;
}
}
Defini o result no xml do “vamove” para o arquivo teste.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Teste double</title>
</head>
<body>
<s:form action="teste!vamove" method="post">
<s:property value="data"/>
<s:property value="f1"/>
<s:textfield name="f1" value=""></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
Aí quando altero a configuração do idioma do browser (locale) para pt-br (tentei no IE e no FF) a resposta é:
16/05/09 123.4
Ou seja, a data está formatada direitinho, mas o número aparece com ponto ao invés do separador de vírgula (123,4).
Eu sei que dá pra definir um arquivo properties para definir um padrão de exibição etc. Mas o problema meu não é para exibição, mas sim em postar um valor fracionário que o usuário por ser brasileiro digitará provavelemente com a vírgula… O struts dá erro de conversão… ele simplesmente não tá fazendo a conversão dos double baseada em locale. Já dei um getLocale() no código que está recebendo e está correto (pt_BR).
Minha versão do struts é 2.0.14 e do xwork é 2.0.7
Pessoal, espero que possam ajudar. Estou há 2 dias já quebrando a cabeça com isso e consegui resolver com soluções muito porcas do tipo configurar variáveis do tipo String pra receber o valor do post e depois fazer a conversão via código… Mas é horrível ter que quebrar toda a estrutura de orientação a objeto pra ficar fazendo esses POG… Não é possível que o Struts 2 não tenha um jeito mais fácil e mais limpo de se resolver este problema.
Abraços!