Bom dia, criei um outro topico: (Metodos Public e Private no
GranteDS?), vc ja deve ter passado por ele....
sera que vc poderia me dar uma luz, quando crio um atributo de uma
classe criada por mim so consigo velo no Flex se o mesmo for public.

segue abaixo msg que eu deixei no topico novo:


Boa noite, estou com um problema no Granite, quando tenho um atributo
na minha classe java do tipo String consigo acessa-lo tanto faz se
ele
é public ou private, porém quando tenho um atributo do tipo Filhos(um
classe criada por mim) só consigo acessar se a minha instancia de
filhos for public....

Alguém sabe me explicar porque???
Segue abaixo classes envolvidas na questão:


Usuário:
package test.pojo;
public class Usuario {
        private int id;
        private String nome;
        private String sobreNome;
        private Filhos filhos;  // se aqui for public funciona....
estou
achando muito estranho


        public Usuario(int id, String nome, String sobreNome) {
                this.setId(id);
                this.setNome(nome);
                this.setSobreNome(sobreNome);
                this.setFilhos("Agata", "Heitor");
        }


        public String teste() {
                return "Deu certo";
        }


        public Integer getId() {
                return this.id;
        }
        public void setId(Integer id) {
                this.id = id;
        }
        public String getNome() {
                return this.nome;
        }
        public void setNome(String nome) {
                this.nome = nome;
        }
        public String getSobreNome() {
                return this.sobreNome;
        }
        public void setSobreNome(String sobreNome) {
                this.sobreNome = sobreNome;
        }


        public void setFilhos(String filho1, String filho2) {
                this.filhos = new Filhos(filho1, filho2);
        }


        public Filhos getFilhos() {
                return this.filhos;
        }



}


Filhos:
package test.pojo;
public class Filhos {
        private String filho1;
        private String filho2;

        public Filhos(String filho1, String filho2) {
                setFilho1(filho1);
                setFilho2(filho2);
        }


        public String getFilho1() {
                return this.filho1;
        }
        public void setFilho1(String filho1) {
                this.filho1 = filho1;
        }
        public String getFilho2() {
                return this.filho2;
        }
        public void setFilho2(String filho2) {
                this.filho2 = filho2;
        }



}


Flex:
<?xml version="1.0" encoding="utf-8"?>

<mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml";
    xmlns="*"
    xmlns:cs="test.granite.components.*"
    layout="vertical"
     height="780" width="1024">


    <mx:Script>
        <![CDATA[
            import mx.messaging.Producer;
            import
mx.charts.effects.effectClasses.SeriesInterpolateInstance;


            import mx.controls.Alert;
            import mx.rpc.events.ResultEvent;
            import mx.collections.ArrayCollection;


            [Bindable]
            public var usuario:Object;
            [Bindable]
            public var usuarios:ArrayCollection;


            private function
onResultHelloWorld(event:ResultEvent):void{
                mx.controls.Alert.show(event.result as String);
            }
            private function
onRetornaUsuario(event:ResultEvent):void{
                usuarios = ArrayCollection(event.result);
                //usuario = Object(event.result);
                //mx.controls.Alert.show("Eu, "+usuario.nome+'
'+usuario.sobreNome+", tenho 2 filhos: "+usuario.filhos.filho1+" e
"+usuario.filhos.filho2);


                }


                public function colFilho1(item:Object,
column:DataGridColumn):String {
                                return item.filhos.filho1.toString();
                }


                public function colFilho2(item:Object,
column:DataGridColumn):String {
             return item.filhos.filho2.toString();
                }


        public function mudaLinha(event:Event):void
        {
             lbl.text = event.target.selectedItem.id;
        }


        ]]>
    </mx:Script>
    <mx:RemoteObject id="srv" showBusyCursor="true"
destination="pojo" />
    <mx:Label id="lbl" text="{srv.getCounter.lastResult}" />
    <mx:Button label="Go" click="srv.getCounter()"/>


    <mx:RemoteObject id="srvHelloWorld"
        showBusyCursor="true"
        destination="HelloWorldService"
        result="onRetornaUsuario(event)" />
    <mx:Button label="Show Messages"
click="srvHelloWorld.sayHelloWorld()"/>
    <mx:Button label="Pega Usuário"
click="srvHelloWorld.retornaUsuario()"/>


    <mx:DataGrid dataProvider="{usuarios}" change="mudaLinha(event)">
        <mx:columns>
        <!--
           <mx:DataGridColumn headerText="Id" dataField="id"/>
        -->
            <mx:DataGridColumn headerText="Nome" dataField="nome" />
            <mx:DataGridColumn headerText="Sobre nome"
dataField="sobreNome"/>
            <mx:DataGridColumn headerText="Filho 1"
labelFunction="{colFilho1}"/>
            <mx:DataGridColumn headerText="Filho 2"
labelFunction="{colFilho2}"/>
        </mx:columns>
    </mx:DataGrid>
 </mx:Application>


Alguém consegue fazer tudo com o private, poderia me passa partes do
códio(como fiz acima) para que eu possa analisar e achar onde esta o
meu erro??


Desde já Obrigado
Sandro Mueller





On 15 jul, 01:22, "Silvio Luiz" <[EMAIL PROTECTED]> wrote:
> 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- Ocultar texto entre aspas -
>
> - Mostrar texto entre aspas -


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