Thanks Doug, I was able to print the child object properties using the labelFunction, but the problem is the column is editable, so when ever i click that filed it's changing back to [object.object]. Do you have any samples using as script printing child object properties in datagrid? BTW i changed logger level="Debug in gateway-config file and it's was printing all the parent child values from Java.
i appreciate your help. --- In [email protected], "douglowder" <[EMAIL PROTECTED]> wrote: > > I think that design is fine. I use a similar approach, except that my > POJOs are a combination of entity objects + dataaccess method, i.e. > each class has a getList() method that returns a list of all known > instances of that type. I chose that approach because these were > POJOs written explicitly with Flex in mind, since this was a new > project with no existing codebase to work from. It's entirely up to > you how much separation you want between data access and the objects > themselves. > > A case where you might be forced to use a facade class is when you > have a private member that is determined dynamically in code and > accessed only through a getter. In this instance, you could write > another class that calls the first class's getter and sets a public > member variable to the results. This new class would be what your > RemoteObject calls from Flex. > > > Doug > > --- In [email protected], "sshriyan27" <sshriyan27@> wrote: > > > > Thanks Doug, > > Now i understand. Let me ask you a question then, my design consists > > of 2 parts, i have entity objects and dataaccess objects, each time > > i do a method call in dataaccess obj and it returns either a > > collection of entity objects or single entity objects to client. > > > > Is this a right way to do or should i use some facade patterns, what > > do you think, since i'm coming struts background it's kind of > > learning curve for me using flex. I'm not using any EJB's for our > > application. It's a simple 3 tier arch. > > > > thanks > > > > > > > > > > --- In [email protected], "douglowder" <douglowder@> > > wrote: > > > > > > It isn't a case of need. One reason you might *want* to have > > public > > > members in your POJO is for convenience. Flex will automatically > > > handle conversion of Java strings (as well as several other types; > > > check the documentation) to actionscript, so if your RemoteObject > > > returns a collection of POJOs with public String members you can > > plug > > > that list directly into a grid's dataprovider without any extra > > > actionscript code. This would correspond to collections of ClassA > > and > > > ClassB objects, which map nicely to what dataProviders expect. You > > > cannot, however, pass a list of Class1 POJOs and expect the > > datagrid > > > to display Class1.ClassA.A1, Class1.ClassB.B1, etc., without doing > > > some extra work on the actionscript side. See the difference? > > > > > > Now, this doesn't mean you *have* to do things either one way or > > > another. I'm just trying to explain what I personally think is the > > > easiest way to get POJO data into a dataGrid in Flex. If this > > still > > > isn't clear, let me know and I'll try to provide some working code. > > > > > > Hope that helps! > > > > > > Doug > > > > > > --- In [email protected], "sshriyan27" <sshriyan27@> > > wrote: > > > > > > > > Thanks guys for helping me out here, but still i don't > > understand > > > > why should i need to have public members firstname,lastname etc > > in > > > > the CloserResultsForm form, isn't it involves redundancy and > > hard to > > > > maintain lots of member variables. > > > > > > > > all i want is this, > > > > > > > > Class1 instanciate class A, class B, Class A has member > > variables > > > > A1,A2 and Class B has B1,B2 etc, > > > > if i want to display A1, B1 values using Class1, > > > > i should be saying classA.A1,classA.A2, ClassB.B1, ClassB.B2 etc, > > > > i don't want to declare A1,A2 in Class1 again in 2 palces. > > > > Am i missing something here about my design pattern? May be i'm > > > > confused. > > > > Pls help me soon. > > > > > > > > --- In [email protected], "douglowder" <douglowder@> > > > > wrote: > > > > > > > > > > You're almost there! What you want is for CloserDataAccess to > > > > return > > > > > a list of objects that contain firstname and lastname > > properties. > > > > > What you have now is a list of objects that contain other > > objects > > > > (the > > > > > UserProfileForms), which then contain firstname and lastname. > > > > > > > > > > If your CloserResultsForm java class had public members > > firstname > > > > and > > > > > lastname, initialized by calling the proper getters from > > > > > UserProfileForm, your datagrid should work. This wouldn't even > > > > > require the separate ActionScript classes for > > CloserResultsForm and > > > > > UserProfileForm. > > > > > > > > > > > > > > > Doug > > > > > > > > > > > > > > > --- In [email protected], "sshriyan27" > > <[EMAIL PROTECTED]> > > > > wrote: > > > > > > > > > > > > Thanks but still not working i made them private now. > > > > > > I'm totally lost with action script and object mapping. > > > > > > Do i need to use action script for the value objects i have, > > if > > > > that > > > > > > so is there any easy way to write action scripts same as the > > > > java > > > > > > objects. > > > > > > > > > > > > > > > > > > <mx:Application > > xmlns:mx="http://www.macromedia.com/2003/mxml" > > > > > > initialize="initApp()" xmlns:i2view="view" pageTitle="Test > > > > > > Application"> > > > > > > > > > > > > <mx:Script> > > > > > > import src.com.flex.form.*; > > > > > > > > > > > > var users: Array; > > > > > > var upForm: UserProfileForm; > > > > > > var closerResultsForm: CloserResultsForm; > > > > > > var userList: Array; > > > > > > var resultList: Array; > > > > > > > > > > > > function initApp() { > > > > > > ro.getResults(); // returns > > CloserResultsForm as a > > > > > > collection > > > > > > > > > > > > } > > > > > > > > > > > > function getUserList_result(event) { > > > > > > userList=event.result; > > > > > > } > > > > > > > > > > > > function getResultList_result(event) { > > > > > > resultList=event.result; > > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > </mx:Script> > > > > > > > > > > > > <mx:RemoteObject id="ro" > > > > > > source="com.chl.dataaccess.CloserDataAccess"> > > > > > > <mx:method name="getResults" result="getResultList_result > > > > > > (event)"/> > > > > > > </mx:RemoteObject> > > > > > > > > > > > > <mx:DataGrid id="dg" dataProvider="{resultList}" > > width="838" > > > > > > editable="true" showHeaders="true"> > > > > > > <mx:columns> > > > > > > <mx:Array> > > > > > > <mx:DataGridColumn columnName="firstname" > > > > > > headerText="Firstname"/> > > > > > > <mx:DataGridColumn columnName="lastname" > > > > > > headerText="Lastname"/> > > > > > > </mx:Array> > > > > > > </mx:columns> > > > > > > </mx:DataGrid> > > > > > > > > > > > > > > > > > > ** This is the situation i'm in now, we're going to develop > > new > > > > apps > > > > > > using RIA technology, we don't have time to learn action > > scripts > > > > or > > > > > > any other vedor specific scripts. so i'm trying to convince > > that > > > > > > flex is the best solution, but it looks like flex dev is not > > > > rapid > > > > > > as what i saw from demo, still lots of manual coding has to > > be > > > > done. > > > > > > May be i'm not understanding fully about flex. > > > > > > > > > > > > So can you guys tell me whether i should use flex or > > coldfushion > > > > or > > > > > > ajax with struts as i did before. > > > > > > > > > > > > Thanks > > > > > > > > > > > > > > > > > > --- In [email protected], "douglowder" > > > > <[EMAIL PROTECTED]> > > > > > > wrote: > > > > > > > > > > > > > > Ah, it looks like you have taken both my *and* Dave's > > advice, > > > > when > > > > > > you > > > > > > > really only needed to do one or the other. So, if you > > don't > > > > have a > > > > > > > problem with making your firstname and lastname variables > > > > public in > > > > > > > your UserProfileForm POJO (which you might, since it kind > > of > > > > > > defeats > > > > > > > the purpose of getters and setters), then just pass your > > > > datagrid a > > > > > > > collection of UserProfileForms: > > > > > > > > > > > > > > <mx:DataGrid dataProvider="{myUserProfileFormCollection > > }" /> > > > > > > > > > > > > > > This will display the entire object in the datagrid. If > > you > > > > only > > > > > > want > > > > > > > to see certain fields, or want to specify a specific > > order, > > > > define > > > > > > > columns for the datagrid like so: > > > > > > > > > > > > > > <mx:DataGrid dataProvider="{myUserProfileFormCollection > > }"> > > > > > > > <mx:columns> > > > > > > > <mx:Array> > > > > > > > <mx:DataGridColumn columnName="firstname" > > > > > > > headerText="First Name"/> > > > > > > > <mx:DataGridColumn columnName="lastname" > > > > > > > headerText="Last Name"/> > > > > > > > </mx:Array> > > > > > > > </mx:columns> > > > > > > > </mx:DataGrid> > > > > > > > > > > > > > > If, however, you want to keep the members variables of > > your > > > > objects > > > > > > > hidden and provide access only through getters and > > setters, > > > > then > > > > > > > change the declarations back to private and follow Dave's > > > > advice. > > > > > > > > > > > > > > I hope that helps! > > > > > > > > > > > > > > Doug > > > > > > > > > > > > > > --- In [email protected], "sshriyan27" > > > > <[EMAIL PROTECTED]> > > > > > > wrote: > > > > > > > > > > > > > > > > Let me send you all my classes, i don't still > > understand! > > > > Thanks > > > > > > for > > > > > > > > your help anyway. > > > > > > > > > > > > > > > > public class UserProfileForm { > > > > > > > > > > > > > > > > public String firstname=null; > > > > > > > > public String lastname=null; > > > > > > > > > > > > > > > > public UserProfileForm(){} > > > > > > > > > > > > > > > > public String getFirstname() { > > > > > > > > return firstname; > > > > > > > > } > > > > > > > > public void setFirstname(String firstname) { > > > > > > > > this.firstname = firstname; > > > > > > > > } > > > > > > > > public String getLastname() { > > > > > > > > return lastname; > > > > > > > > } > > > > > > > > public void setLastname(String lastname) { > > > > > > > > this.lastname = lastname; > > > > > > > > } > > > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > public class CloserResultsForm implements Serializable{ > > > > > > > > public UserProfileForm userProfileForm; > > > > > > > > > > > > > > > > public CloserResultsForm(){ > > > > > > > > userProfileForm=new UserProfileForm(); > > > > > > > > } > > > > > > > > public UserProfileForm getUserProfileForm() { > > > > > > > > return userProfileForm; > > > > > > > > } > > > > > > > > public void setUserProfileForm (UserProfileForm > > > > > > > > userProfileForm) { > > > > > > > > this.userProfileForm = userProfileForm; > > > > > > > > } > > > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > ** my dataaccess returns collection of CloserResultsForm > > > > > > > > > > > > > > > > CloserResultsForm.as file > > > > > > > > class src.com.flex.form.CloserResultsForm{ > > > > > > > > public var userProfileForm : UserProfileForm; > > > > > > > > > > > > > > > > static var registered=Object.registerClass > > > > > > > > ("com.chl.form.CloserResultsForm", > > > > > > > > src.com.flex.form.CloserResultsForm); > > > > > > > > > > > > > > > > public function CloserResultsForm(){ > > > > > > > > this.userProfileForm=new UserProfileForm(); > > > > > > > > } > > > > > > > > } > > > > > > > > > > > > > > > > UserProfileForm.as file > > > > > > > > class src.com.flex.form.UserProfileForm{ > > > > > > > > public var firstname:String; > > > > > > > > public var lastname:String; > > > > > > > > public var _remoteClass; > > > > > > > > static var registered=Object.registerClass > > > > > > > > ("com.chl.form.UserProfileForm", > > > > > > src.com.flex.form.UserProfileForm); > > > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > How do i print the firstname and lastname in datagrid, > > am i > > > > > > missing > > > > > > > > something here. > > > > > > > > > > > > > > > > --- In [email protected], "Dave Wolf" > > > > <[EMAIL PROTECTED]> > > > > > > wrote: > > > > > > > > > > > > > > > > > > Ahh yes, the same J2EE struggles with property > > setting. > > > > As > > > > > > Doug > > > > > > > > says > > > > > > > > > you do not want to be calling a million setters on a > > > > remote > > > > > > object. > > > > > > > > > You are better off refactoring this to either create a > > new > > > > > > Value > > > > > > > > > Object, or to treat your existing class itself as a > > value > > > > > > object. > > > > > > > > > > > > > > > > > > So rather then getting a remote reference to say > > > > > > UserProfileForm, > > > > > > > > then > > > > > > > > > calling a million getters and setters, I would create > > a > > > > POJO > > > > > > which > > > > > > > > > returns the UserProfileForm as a return type. Then > > call > > > > all > > > > > > your > > > > > > > > > setters locally, and pass it back up to the server as > > the > > > > > > > > parameter to > > > > > > > > > another POJO method call. > > > > > > > > > > > > > > > > > > The second option is to add a new Value Object > > property to > > > > the > > > > > > > > > UserProfileForm. Again create the stub, call all the > > > > setters > > > > > > on > > > > > > > > the > > > > > > > > > local value object, then call one call on the > > > > UserProfileForm > > > > > > to > > > > > > > > > return this coarsly grained Value Object. > > > > > > > > > > > > > > > > > > You need to keep network calls in mind in your > > > > architecture. > > > > > > > > There is > > > > > > > > > a graveyard filled with failed J2EE projects who > > ignored > > > > the > > > > > > > > network > > > > > > > > > and the effects of not architecting around seriously > > > > reducing > > > > > > the > > > > > > > > > number and size of remote calls. > > > > > > > > > > > > > > > > > > -- > > > > > > > > > Dave Wolf > > > > > > > > > Cynergy Systems, Inc. > > > > > > > > > Macromedia Flex Alliance Partner > > > > > > > > > http://www.cynergysystems.com > > > > > > > > > > > > > > > > > > Email: [EMAIL PROTECTED] > > > > > > > > > Office: 866-CYNERGY > > > > > > > > > > > > > > > > > > > > > > > > > > > --- In [email protected], "douglowder" > > > > > > <[EMAIL PROTECTED]> > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > Flex 1.5 does a pretty good job of automatically > > > > translating > > > > > > > > Java > > > > > > > > > > types to ActionScript, but only for members that are > > > > > > declared > > > > > > > > > > public, not private. So, if you want to continue > > using > > > > your > > > > > > > > getter > > > > > > > > > > routines for private members in your existing > > classes, > > > > be > > > > > > > > prepared > > > > > > > > > > to make a lot of calls to your remote object. You > > could > > > > > > also > > > > > > > > create > > > > > > > > > > a new "facade" Java class for mapping purposes, > > which > > > > would > > > > > > have > > > > > > > > > > public members for all the variables you want to > > expose > > > > to > > > > > > > > > > ActionScript, and have that class make all the calls > > to > > > > your > > > > > > > > > > existing class's getters to initialize those public > > > > > > members. > > > > > > > > You > > > > > > > > > > can then refer to the variables by name (the same > > name > > > > as in > > > > > > the > > > > > > > > > > Java class) from within ActionScript. > > > > > > > > > > > > > > > > > > > > Another thing to keep in mind is that datagrids > > expect > > > > to be > > > > > > > > passed > > > > > > > > > > arrays (actually, anything that implements the > > > > DataProvider > > > > > > > > > > interface) of objects, not a single object. If your > > > > Java > > > > > > calls > > > > > > > > are > > > > > > > > > > returning a single object instead of a list of > > objects, > > > > use > > > > > > > > > > mx.utils.ArrayUtil.toArray() on the result to > > convert it > > > > to > > > > > > an > > > > > > > > array > > > > > > > > > > in ActionScript. > > > > > > > > > > > > > > > > > > > > Doug > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > --- In [email protected], "sshriyan27" > > > > > > > > <[EMAIL PROTECTED]> > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > I'm new to Flex we're trying evaluate in our > > company > > > > > > whether > > > > > > > > we > > > > > > > > > > > should use FLEX or not. Right we have Java, Struts > > > > based > > > > > > > > > > application. > > > > > > > > > > > > > > > > > > > > > > I have a simple question, i have an Object and > > still > > > > > > strugling > > > > > > > > to > > > > > > > > > > > map that to an action script and datagrid. > > > > > > > > > > > How do i display values of UserProfileForm in > > > > datagrid, > > > > > > like > > > > > > > > in > > > > > > > > > > > Struts i used to do > > > > > > > > CloserResultsForm.userProfileForm.firstname > > > > > > > > > > (); > > > > > > > > > > > Can some one explain this to me. > > > > > > > > > > > ** I can get the Single object to get displayed > > but > > > > not > > > > > > the > > > > > > > > > > > inhertited ones. > > > > > > > > > > > > > > > > > > > > > > public class CloserResultsForm implements > > Serializable{ > > > > > > > > > > > private UserProfileForm userProfileForm; > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > public class UserProfileForm { > > > > > > > > > > > private String username=null; > > > > > > > > > > > private int userid; > > > > > > > > > > > private String password=null; > > > > > > > > > > > private String firstname=null; > > > > > > > > > > > private String lastname=null; > > > > > > > > > > > private String roleName=null; > > > > > > > > > > > > > > > > > > > > > > public UserProfileForm(){ > > > > > > > > > > > > > > > > > > > > > > } > > > > > > > > > > > .... // then getters and setters for the above > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/flexcoders/ <*> To unsubscribe from this group, send an email to: [EMAIL PROTECTED] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/

