Se a pergunta for..Como acessar objetos em 2º nível..A resposta está como
escrito:
<mx:DataGridColumn headerText="Grupo" labelFunction="{grupoBinding}"/>
public function grupoBinding(item:Object, column:DataGridColumn):String {
return item.grupo.nomeGrupo.toString();
}
Ou você pode criar um component, e usar como itemRenderer:
<mx:Component id="grupoBinding">
<mx:Label text="{meudataProvider.grupo.nome}" />
</mx:Component>
<mx:DataGridColumn headerText="Observação" itemRenderer="{grupoBinding}" />
Se você quiser pensar nisso de forma automatizada, ao que me parece, a única
forma é extender o componente da grid e já criar seja um labelFunction a
partir de "meuDataProvider.grupo.nome" , ou um componente pra ser usado como
itemRenderer(Alguém me corrija se estiver errado...)
[]'s
Silvio Luiz
On 7/14/07, Aranha <[EMAIL PROTECTED]> wrote:
>
>
> vc consegui a solução pra esta sua pergunta???
>
> On 11 jul, 14:43, "Silvio Luiz" <[EMAIL PROTECTED]> wrote:
> > Realmente...
> >
> > Mudei pra Collection e funcionou... O problema é que ao tentar acessar o
> > objeto Grupo, dentro de Usuario, não consegui usando dataField. Tive que
> > fazer uma gambiarra pra funcionar. O DataGridColumn tem um método
> chamado *
> > labelFunction,* que serve pra tratar uma informação antes de ser
> > renderizada. Funcionou dessa forma:
> >
> > <mx:DataGridColumn headerText="Grupo" labelFunction="{grupoBinding}"/>
> > public function grupoBinding(item:Object, column:DataGridColumn):String
> {
> > return item.grupo.nomeGrupo.toString();
> >
> > }
> >
> > Ai eu pergunto, não existe uma forma de meus objetos em 2° nível
> > (Usuario->Grupo) ser reconhecido automaticamente, assim como acontece
> quando
> > uso os atributos em primeiro nível
> > (ex: <mx:DataGridColumn headerText="Nome" dataField="nome" />, sendo
> nome
> > atributo da classe Usuario) ?
> >
> > []'s
> >
> > Silvio Luiz
> >
> > On 7/11/07, Silvio Luiz <[EMAIL PROTECTED]> wrote:
> >
> >
> >
> >
> >
> > > Não tenho certeza se essa é a solução(só devo poder testar em casa),
> mas
> > > lá vai...
> >
> > > Parece que a conversão acontece sim de forma automática, e existe uma
> > > tabela de compatibilidade entre os tipos ActionScript(AMF3) e Java,
> que pode
> > > ser vista aqui<
> http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/common/html/ww...>
> .
> > > Portanto creio que o result pode ser diretamente atribuído a um
> > > ArrayCollection, sem eu fazer um loop(como havia tentado no handler do
> > > Result) . Mas preciso retornar na classe Java Collection, ou
> > > Collection<MinhaClasse>, e eu estava retornando
> ArrayList<MinhaClasse>, quem
> > > puder testar antes de mim posta aqui pra ver se funciona!
> >
> > > []'s
> >
> > > Silvio Luiz
> >
> > > On 7/11/07, Silvio Luiz <[EMAIL PROTECTED] > wrote:
> >
> > > > Bem..
> >
> > > > Segundo o livedocs, nessa<
> http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/common/html/ww...>página,
> o ArrayElementType serve pra que um array só aceite valores de
> > > > determinado tipo, mais ou menos como é feito no Java5:
> >
> > > > Collection<String> colNomes, no AS seria:
> >
> > > > [ArrayElementType("String")]
> > > > public var colNomes:Array;
> >
> > > > Só não fica claro se posso usar isso pra mapear classes Java
> mesmo..quem
> > > > souber... :)
> >
> > > > On 7/11/07, Silvio Luiz <[EMAIL PROTECTED] > wrote:
> >
> > > > > Bom dia,
> >
> > > > > Declaro em meu mxml um remoteObject, e através do GraniteDS, uso
> uma
> > > > > classe Java que me retorna uma coleção de objetos do tipo
> Usuario(com nome,
> > > > > idade e um outro objeto Grupo, com descricao). A questão é, pra
> que eu use
> > > > > essa coleção como dataProvider de uma grid, como eu posso mapear
> exatamente
> > > > > a minha classe pra que seus campos possam ser usados como
> datafield nas
> > > > > dataGrigColumns? Segundo o exemplo do graniteDS que trabalha com
> Ejb3, eu
> > > > > precisaria fazer algo assim:
> >
> > > > > [ArrayElementType("meuPacote.minhaClasse")]
> > > > > [Bindable]
> > > > > public var dados:ArrayCollection = new ArrayCollection();
> >
> > > > > E no método ao retornar o result:
> >
> > > > > private function onResultGetUsuarios(event:ResultEvent):void{
> > > > > var result:ArrayCollection = ArrayCollection(
> event.result);
> > > > > for (var i:int = 0; i < result.length; i++) {
> > > > > * var usuario:Usuario= Usuario(result.getItemAt(i));
> > > > > * dados.addItem(usuario);
> > > > > }
> > > > > }
> >
> > > > > Fazendo assim é gerado um erro, mas quando substituo a linha em
> > > > > negrito por:
> >
> > > > > var usuario:Object = Object(result.getItemAt(i));
> >
> > > > > funciona! Mas apenas pra os dados primitivos de meu objeto
> Usuario, ou
> > > > > seja, apenas nome e idade.
> > > > > A pergunta é: eu realmente consigo usar esse ArrayElementType pra
> > > > > fazer o que estou pensando? Ou seja, mapear meu Pojo no lado do
> Flex? Se não
> > > > > como eu posso fazer isso, preciso criar uma classe .AS pra mapear
> meu
> > > > > objeto? Meu objetivo é retornar uma coleção no "lado Java da
> força", e usar
> > > > > o result no "lado Flex da força" como dataProvider de um
> componente qualquer
> > > > > que eu queira..
> >
> > > > > []'s
> >
> > > > > Silvio Luiz
> >
> > > > --
> > > > Silvio Luiz
> >
> > > --
> > > Silvio Luiz
> >
> > --- Ocultar texto entre aspas -
> >
> > - Mostrar texto entre aspas -
>
>
> >
>
--
Silvio Luiz
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---