Webwork e local

Pessoal,

Estou usando webwork e apanhando um poquinho. A dúvida de agora é a seguinte: o WW está formatando tudo (datas, números) no formato americado - data=MM/DD/YYYY, grana=100.0. É possível alterar alguma configuração para que ele passe a exibir as informações da maneira como usamos no Brasil?

Outra coisa: em função do formato que ele usa, quando eu submeto alguma data a partir de uma página, por exemplo 02/08/2004, ele seta o meu objeto Date com “Oito de fevereiro de 2004” e não como “Dois de agosto”. Como eu faço para resolver isso?

Obrigado,

Gleison

Para resolver você vai ter que escrever seu prórprio converter pro objeto Date, um conversor que considere o Locale selecionado pelo usuário pra fazer a conversão é uma boa.

Um link que vai te ajudar um pouco:
http://wiki.opensymphony.com/display/XW/Type+Conversion

ps.: Smota, cadê a versão 2.0 do tutorial do WebWork - Técnicas avançadas? :smiley:

WebWork-fu! :mrgreen:

:oops: :oops: :oops: :oops:

Não tenho nada planejado por hora, eu estava atolado com meu TG. Se todo mundo torcer direitinho pra minha apresentacao amanha e tudo der certo eu escrevo um rapidim :shock:

[quote]Um link que vai te ajudar um pouco:
http://wiki.opensymphony.com/display/XW/Type+Conversion [/quote]

Pessoal,

Segui os passos do link acima, mas ainda não tá dando certo. Pelo que pude perceber o ww não está usando a classe que escrevi para fazer a conversão.

A classe:

public Object convertValue(Map ognlContext, Object value, Class toType){ logger.info("[CONVERSION CONVERSION CONVERSION]"); if(toType == String.class){ logger.info("[JHIS WEB] Conversão para String: toType=String.class"); try { logger.info("[JHIS WEB] Valor: " + (String) value); Date d = new SimpleDateFormat("dd/MM/yyyy").parse((String)value); return d; } catch (ParseException e) { logger.error(e.getMessage()); } } return null; }

Além da classe, criei uma arquivo (MinhaClasse-conversion.properties) e o coloquei na raiz da aplicação:

dataInicial=gs.util.webwork.DateConverter dataFinal=gs.util.webwork.DateConverter

O que tá faltando para ele reconhecer a classe conversora que criei?

Obrigado a todos,

Gleison

O seu arquivo MinhaClasse-conversion.properties não deve estar na raiz da sua aplicação e sim na mesma package que MinhaClasse :slight_smile:

Se quiser que seja padrão pra todo mundo usar, registre no arquivo xwork-conversion.properties e esse sim na raiz do classpath.

Mota,

Com a sua dica, funcionou. O WW está encontrando a classe que escrevi. No entanto, ela não tá funcionando…

Quando sobrescrevo o método public Object convertValue(Map ognlContext, Object value, Class toType) … a variável “value” é do tipo String? Executando System.out.println(value.getClass()), foi isso que pude constatar (acho!). Então se ela é uma String, pq é que não consigo ver o valor dela quando executo System.out.println(value)?

Obrigado,

Gleison Silva

Ueba …

Existem 2 momentos de conversão:

  1. Na apresentacao: Seu objeto é naturalmente uma Date e vc quer mostrar na tela entao vai virar uma String; e
  2. No preenchimento: O cara digitou na tela entao eh uma String e vc vai setar a propriedade que eh Date.

O Conversor tem que saber fazer as 2 coisas pra ser útil …

de uma brincada com isso por ai e poste o codigo completo do conversor depois disso se ainda tiver algum problema.

Bom dia!

Pois bem, no momento do “Preenchimento”, a varíavel é String e vou convertê-la para Date. Estou tentando fazer isso usando o método “parse” do “SimpleDateFormat”. Esse método usa uma String como parâmetro. E aí que eu garrei! Quando passo a varíavel “value” como parâmetro para o método ele lança uma exceção como se “value” não fosse String.
Tem alguma luz para me dar?

Obrigado,

Gleison

A sua descrição não bate com o código que você passou.

No código public Object convertValue(Map ognlContext, Object value, Class toType){ logger.info("[CONVERSION CONVERSION CONVERSION]"); if(toType == String.class){ logger.info("[JHIS WEB] Conversão para String: toType=String.class"); try { logger.info("[JHIS WEB] Valor: " + (String) value); Date d = new SimpleDateFormat("dd/MM/yyyy").parse((String)value); return d; } catch (ParseException e) { logger.error(e.getMessage()); } } return null; }

o toType é a classe String então o value na verdade tem o valor que seu getCampo() rertorna, provavelmente um Date.

Quando estiver preenchendo a propriedade o Webwork vai chamar seu conversor com o toType da classe Date e o value terá sim uma String.

Mota,

Primeiramente, obrigado pela atenção…

Esse código que postei, não é o que estou tentando fazer funcionar. Ainda estou estudando o funcionamento desse conversor, por isso os código não estão completos. O toType, no momento do preenchimento é Date.class. O código que não tá funcionando é:

public Object convertValue(Map ognlContext, Object value, Class toType){
    if(toType == Date.class) {
        return new SimpleDateFormat("dd/MM/yyyy").parse(value.toString());
    } else {
        return null;
    }
}

No método “parse” já tentei usar “String.valueOf(value)” ao invés de “value.toString()”, mas tb não funcionou…

Abraço,

Gleison

Olá Gleison, hj tive o mesmo problema que vc.
Minha primeira atitude foi fazer uma busca no GUJ e ver se achava algo e ví esse topico. Como ele não resolveu meu caso, apanhei um pouco e acabei descobrindo…
Não sei se vc já o resolveu, mas vou deixar registrado para quem tiver o mesmo problema…

String[] v = (String[]) value; String date = v[0];
Assim vc consegue obter a String sem os ClassCastExceptions da vida…
Depois é só parsear:

return new SimpleDateFormat("dd/MM/yyyy").parse(date);

T+!