I use this utility object to take a Struct of key/value pairs and call all setters on a given object which have a "setX" method where X is the name of a key in the Struct.
http://gist.github.com/227407 Used like: BeanUtil.populateBean(someObject, someStruct); Might be a little slower due to its usage of cfinvoke versus Evaluate() /Cody On Thu, Nov 5, 2009 at 2:00 PM, Bob Silverberg <[email protected]> wrote: > Hmm, I've never even heard of listColumns(). If it were me, I'd use the > metadata that Transfer makes available for just this purpose. In case you > didn't see it, here's a link to a post I did about using Transfer's metadata > to create your own implementation of getMemento(): > http://www.silverwareconsulting.com/index.cfm/2008/6/17/Using-Transfer-Metadata-to-Create-a-Memento > > Cheers, > Bob > > > On Thu, Nov 5, 2009 at 4:40 PM, Jim Rising <[email protected]> wrote: >> >> what about listColumns() ? >> >> <cffunction name="copyTransferObject" output="false" hint="I copy one >> transfer object to another"> >> <cfargument name="aObject" required="true" >> type="transfer.com.TransferObject"> >> <cfargument name="bObject" required="true" >> type="transfer.com.TransferObject"> >> <cfset var aObject = arguments.aObject> >> <cfset var bObject = arguments.bObject> >> >> <cfset bColumns = bObject.listColumns()> >> <cfloop list="#bColumns#" index="columnName"> >> <cfset getter = "aObject.get#columnName#()"> >> <cfset columnValue = Evaluate(getter)> >> <cfset setter = 'bObject.set#columnName#("#columnValue#")'> >> <cfset Evaluate(setter)> >> </cfloop> >> <cfreturn bObject /> >> </cffunction> >> >> On Thu, Nov 5, 2009 at 3:23 PM, Bob Silverberg <[email protected]> >> wrote: >>> >>> I'm sure Mark will correct me if I'm mistaken, but I don't think you >>> should be calling setTransferObject() in your code. I'm guessing you could >>> get yourself into all kinds of trouble. >>> >>> On Thu, Nov 5, 2009 at 3:26 PM, John Watson <[email protected]> wrote: >>>> >>>> I'm actually running into issues of losing my decorator methods after >>>> using the setTransferObject(TO). I haven't had time to debug yet (as this >>>> is >>>> not a production app yet). >>>> I do this inside a "myDecoratedObject" called someobject: >>>> <cfset TO = getTransfer().readByPropertyMap("myDecoratedObject",filter) >>>> /> >>>> <cfif TO.getIsPersisted()> >>>> <cfset setTransferObject(TO) /> >>>> <cfelse> >>>> <!--- code that initializes this object based on the filter and saves >>>> it ---> >>>> </cfif> >>>> After running this code, randomly (haven't investigated yet; believe it >>>> somehow related to my filter). "someobject" loses all of its decorator >>>> methods until I clear the transfer cache. >>>> Bob, I read your blog post: >>>> >>>> http://www.silverwareconsulting.com/index.cfm/2008/7/22/How-I-Use-Transfer--Part-IX--My-Abstract-Transfer-Decorator-Object--The-Populate-Method >>>> And i think I will try that out whenever I go back to working on my >>>> project. Thanks for the tip! >>>> Mark, any plans for implementing something similar? >>>> Thanks, >>>> John >>>> On Thu, Nov 5, 2009 at 12:11, Jim Rising <[email protected]> >>>> wrote: >>>>> >>>>> Mark, >>>>> >>>>> Thanks. I'll look into it a bit further. >>>>> >>>>> -jim >>>>> >>>>> >>>>> On Thu, Nov 5, 2009 at 1:14 PM, Mark Mandel <[email protected]> >>>>> wrote: >>>>>> >>>>>> Probably because you are using a variety of undocumented badness :o( >>>>>> >>>>>> getMemento() , switching out the inner object if a Decorator... all >>>>>> sounds pretty bad if you ask me. >>>>>> >>>>>> I think Bob's approach of using his memento function is probably the >>>>>> way to go. >>>>>> >>>>>> Mark >>>>>> >>>>>> >>>>>> On Fri, Nov 6, 2009 at 6:07 AM, Jim Rising <[email protected]> >>>>>> wrote: >>>>>>> >>>>>>> ok... so here is what I did in my decorator: >>>>>>> >>>>>>> <cffunction name="copyContentTemplate"> >>>>>>> <cfargument name="contentTemplate" >>>>>>> type="transfer.com.transferObject" required="true"> >>>>>>> <cfset var contentTemplate = arguments.contentTemplate> >>>>>>> <cfset var content = getTransfer().get("content.Content", >>>>>>> "")> >>>>>>> >>>>>>> <cfset content = setTransferObject(contentTemplate)> >>>>>>> </cffunction> >>>>>>> >>>>>>> now... this does seem to copy a 'contentTemplate' TO into a 'content' >>>>>>> TO without any issues, but when i attempt to save using the following: >>>>>>> >>>>>>> <cffunction name="saveContent" access="public" returntype="any"> >>>>>>> <cfargument name="content" type="transfer.com.transferObject" >>>>>>> required="true"> >>>>>>> <cfset var content = arguments.content> >>>>>>> >>>>>>> <cfset getTransfer().save(content)> >>>>>>> >>>>>>> </cffunction> >>>>>>> >>>>>>> the object does not save. >>>>>>> >>>>>>> any ideas? >>>>>>> >>>>>>> -jim >>>>>>> >>>>>>> >>>>>>> On Thu, Oct 29, 2009 at 11:21 AM, John Watson <[email protected]> >>>>>>> wrote: >>>>>>>> >>>>>>>> Someone who knows a little more detail about how the caching works >>>>>>>> may say what I suggest is a bad a idea, but here's a method I've used >>>>>>>> with >>>>>>>> no issues yet. >>>>>>>> Inside the decorator I've used the TO.setTransferObject(otherTO) >>>>>>>> method. Though both the setting object and the TO object are both the >>>>>>>> same >>>>>>>> (IE: content/content). >>>>>>>> Another idea may be to use setMemento(mementoStruct) >>>>>>>> John >>>>>>>> >>>>>>>> On Thu, Oct 29, 2009 at 09:10, Jim Rising <[email protected]> >>>>>>>> wrote: >>>>>>>>> >>>>>>>>> I'm needing to copy one TO to another TO, and wondered if anyone >>>>>>>>> had any ideas on the best way to do that? Basically I have one TO >>>>>>>>> that needs >>>>>>>>> to serve as a 'template' of another. >>>>>>>>> >>>>>>>>> Example: >>>>>>>>> >>>>>>>>> I have a TO called 'contentTemplate' and another called 'content'. >>>>>>>>> I want to be able to create a 'content' object from the >>>>>>>>> 'contentTemplate' object. >>>>>>>>> >>>>>>>>> I'm thinking I will need to just get / set everything between each >>>>>>>>> of them, but was hoping I would have another option available. >>>>>>>>> >>>>>>>>> Thanks! >>>>>>>>> -- >>>>>>>>> Jim Rising >>>>>>>>> Serial Entrepreneur >>>>>>>>> Software Engineer >>>>>>>>> Web Developer >>>>>>>>> >>>>>>>>> "Knowledge work requires both autonomy and accountability." >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Jim Rising >>>>>>> Serial Entrepreneur >>>>>>> Software Engineer >>>>>>> Web Developer >>>>>>> >>>>>>> "Knowledge work requires both autonomy and accountability." >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> E: [email protected] >>>>>> T: http://www.twitter.com/neurotic >>>>>> W: www.compoundtheory.com >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Jim Rising >>>>> Serial Entrepreneur >>>>> Software Engineer >>>>> Web Developer >>>>> >>>>> "Knowledge work requires both autonomy and accountability." >>>>> >>>>> >>>> >>>> >>>> >>> >>> >>> >>> -- >>> Bob Silverberg >>> www.silverwareconsulting.com >>> >>> >> >> >> >> -- >> Jim Rising >> Serial Entrepreneur >> Software Engineer >> Web Developer >> >> "Knowledge work requires both autonomy and accountability." >> >> > > > > -- > Bob Silverberg > www.silverwareconsulting.com > > > > --~--~---------~--~----~------------~-------~--~----~ Before posting questions to the group please read: http://groups.google.com/group/transfer-dev/web/how-to-ask-support-questions-on-transfer You received this message because you are subscribed to the Google Groups "transfer-dev" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/transfer-dev?hl=en -~----------~----~----~----~------~----~------~--~---
