Webwork e local

12 respostas
Gleison_Silva

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

12 Respostas

smota

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.

_fs

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:

cv1

WebWork-fu! :mrgreen:

smota

: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:

Gleison_Silva

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

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

smota

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.

Gleison_Silva

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

smota

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.

Gleison_Silva

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

smota

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.

Gleison_Silva

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

C

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+!

Criado 24 de agosto de 2004
Ultima resposta 1 de set. de 2004
Respostas 12
Participantes 5