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

Responder a