Olá pessoal! Seguinte... se no Java estiver trabalhando com Integer / Long / Double (são wrappers, não são tipos nativos) e o Flex te mandar um NaN, o BlazeDS vai serializar para null?!? Acho q nao.... qual versao do BlazeDS está usando?
Como Frederico disse, as opções 1 e 2 não se aplicam ao caso do Eduardo, pq ele PODE precisar do numero 0 (zero). Então, o correto é aplicar a solução 3 ou 4 (eu uso a 4, mais flexivel). Assim, se o BlazeDS te mandar um 0 (zero) vc vai persistir o 0(zero), mas lembre-se que o *Number em AS3 não existe null, existe o NaN (Not a Number)*, e o BlazeDS "padrao" converte NaN para 0 por isso q usar wrappers (nos meus testes) nao funcionaram! Portanto, o ideal é oq o Frederico disse: aplique as opções 3 ou 4.. bom, eu mesmo posso recomendar a 4. Abraços. 2009/10/21 Augustus Costa <[email protected]> > Essa sua solução é meio gambiarra vei... isso por que minha coluna no banco > pode aceitar um zero, como no exemplo velocidade de um veiculo... > > Acho muito melhor vc deixar (nesses casos) o tipo no flex como object pq? > pq caso vc esteja usando Integer no Java o resultado pode ir nulo. > > 2009/10/21 Frederico Lellis <[email protected]> > > >> Bom dia Eduardo, >> >> Vou colar uma resposta dada pelo Mario que tive sobre o mesmo assunto. >> >> >> "Ola Frederico.... cara.. ja tive muito essas encheçoes de saco do >> BlazeDS... vc tem 4 formas de resolver isso: >> >> 1) No setter do seu id, vc pode verificar se o valor passado no >> argumento for 0 (zero), entao sete-o para null. >> >> 2) Caso vc nao queira "poluir" suas entidades com essa validacao >> chata, vc poderá validar isso nas suas classes de servicos. >> Qnd vc receber uma entidade com id == 0, entao sete-a para null. É a >> mesma coisa da solução anterior, só mudamos de lugar nao mais no >> setter da entidade, mas agora fazer na classe de servico antes de >> passar o seu objeto para seu dao ( receio q esteja usando algum ORM - >> i.e hibernate). >> >> >> Essas duas solções funcionam, mas podem ser um pouco "chatas" uma vez >> q se terá SEMPRE q fazer o "if (entidade.getId == 0)" ... >> Entao se o programador esquecer de fazer isso em algum momento, já >> era! Além de tornar a pratica repetitiva, está sujeita a falhas. >> >> Agora... vou falar as outras duas formas.... prepare-se para imergir >> no mundo BlazeDS (yes! Imersão BlazeDS.. hehe) >> >> >> Seguinte.. 98% dos usuarios java/flex que usam BlazeDS mal conhecem >> sua estrutura, por isso se perdem com essas coisas. >> Oq vou dizer aqui vi pouca gente usar, lá vai. >> >> >> 3) Criar seu fork do BlazeDS: >> Baixe o source do BlazeDS, abra a classe Amf3Input.java e sobrescreva >> o metodo read(), inserindo o seguine trecho de codigo: >> >> @Override >> public Object readObject() throws ClassNotFoundException, IOException { >> Object value = super.readObject(); >> if (value instanceOf Double && ((Double).value).isNaN()){ >> value = null; >> } >> >> return value; >> } >> >> >> Muita atenção para esse trecho: ((Double).value).isNaN()) >> Isso significa que se o Flex me mandar um NaN (Nota a Number) vou >> converte-lo para null, e nao para 0 (zero) como é o procedimento >> normal. >> É aí q está o segredo da serialização de numeros (long / int) entre Fx <=> >> Java! >> >> Alterada a classe, compile o BlazeDS e utilize sua versao propria. >> >> >> >> 4) (A forma que EU uso) >> O BlazeDS é flexível a ponto de eu criar meu proprio Adapter (classe >> responsavel por invocar as suas classes de serviço no Java). >> Entao, oq eu faço é extender a classe JavaAdapter e sobreescrever o >> método invoke() >> Nesse ponto vc tem acesso aos parametros (de entrada e saída) de >> serialização. >> Com isso em maos, vc pode usar Reflexao para validar/alterar os >> valores q chegam do Flex (e os q vao tb). >> >> Assim fica mais generico, e bem mais reaproveitavel. >> >> >> Espero ter ajudado. >> >> Abraços." >> >> >> Eu implementei do lado do java os checks, mas no seu caso voce tera >> que implementar a solução número 4 ou 3. >> >> espero ter ajudado. >> >> obs: caso voce venha a fazer a solução numero 4, disponibiliza a >> classe aqui para o grupo? >> >> abraços. >> >> >> >> 2009/10/21 Eduardo Rodrigues <[email protected]>: >> > >> > Bom dia pessoal, >> > >> > Andei lendo e testando e o quando tenho um objeto Number nulo no lado >> > do flex o comportamento é que ele é serializado para o valor default >> > no java. >> > Digamos que eu mapeie um Integer no java e um Number no flex, quando o >> > number está nulo ele vai 0 pro java, mesmo sendo Integer um wrappper >> > que poderia ser perfeitamente serializado para null. >> > Em aplicações que o valor 0 é um valor significativo e nulo é a >> > ausência de valor este comportamento não é desejado. >> > Ex: >> > Lançamento de notas de provas escolares. >> > O aluno quer saber quando sua nota não foi lançada (nulo) ou se ele >> tirou 0. >> > >> > Como vocês costumam tratar este tipo de caso? Eu realmente não quero >> > criar um boolean do tipo "valor lançado" pois isto é muito >> > anti-natural no meu ponto de vista. >> > >> > Estou usando BlazeDA + java 5+ >> > >> > Obrigado! >> > >> > > >> > >> >> >> >> -- >> -- >> ****************************************************** >> >> Frederico Lellis de Albuquerque >> Analista Desenvolvedor Java/Flex Pleno. >> Graduado Em Ciência da Computação >> [email protected] >> >> ****************************************************** >> >> >> > > > -- > Horus Augustus C. C. Lima > > Sagarana Tech > Mobile +55(85)8842.4402 > Desk +55(85)3304.6530 > [email protected] > http://www.sagaranatech.com > > > > > -- Mario Junior Enterprise Java / Flex Architectures Adobe Certified Expert Flex 3 with AIR Sofshore Informática http://www.sofshore.com.br +55 (48) 3337 2003 Rua Pastor Willian Richard Schisler Filho 452 sl 102, 88034-100 Itacorubi Florianopolis SC Brasil --~--~---------~--~----~------------~-------~--~----~ Você recebeu esta mensagem porque está inscrito na lista "flexdev" Para enviar uma mensagem, envie um e-mail para [email protected] Para sair da lista, envie um email em branco para [email protected] Mais opções estão disponíveis em http://groups.google.com/group/flexdev -~----------~----~----~----~------~----~------~--~---
