I use an AbstractDecorator:
<cfcomponent displayname="AbstractDecorator" output="false"
extends="transfer.com.TransferDecorator">
<cffunction name="setInstanceFromStruct">
<cfargument name="data" required="true" type="struct"
hint="The struct containing the data to set." />
<cfloop index="i" list="#StructKeyList(arguments.data)#">
<cfinvoke method="set#i#">
<cfinvokeargument name="#i#"
value="#trim(arguments.data[i])#" />
</cfinvoke>
</cfloop>
</cffunction>
</cfcomponent>
Then each transfer object has a decorator that extends the
AbstractDecorator, like so:
<cfcomponent displayname="HerbDecorator" output="false"
extends="AbstractDecorator">
<cffunction name="configure" access="public" output="false">
<cfset setValidationResult(true)>
<cfset setInvalidFields('')>
<cfset setMissingFields('')>
</cffunction>
<cffunction name="validate" returntype="void" access="public"
output="false">
....
</cfcomponent>
Bob's populate method is much more complex, as I remember.
Nando
On Wed, Jan 7, 2009 at 6:30 PM, Brian FitzGerald
<[email protected]>wrote:
>
> sorry Josh, I should've provided more info. It might look something
> like this:
>
> var properties = getTransferObjectProperties(transferBean);
> var i = 1;
> var thisProperty = "";
>
> for(i = 1; i lte arrayLen(properties); i++) // call the setter for
> each property in the object
> {
> thisProperty = properties[i].name;
> if(structKeyExists(arguments.args, thisProperty))
> {
> evaluate( "transferBean.set" & thisProperty & "('" &
> arguments.args[thisProperty] & "')" );
> }
> }
>
> On Jan 7, 12:26 pm, Brian FitzGerald <[email protected]>
> wrote:
> > Hey Josh, yeah that's something I wrote...
> >
> > On Jan 7, 12:21 pm, "Josh Nathanson" <[email protected]> wrote:
> >
> > > Is that "populate" method something you cooked up, or is that native to
> > > Transfer? I can't find it anywhere in the docs.
> >
> > > -- Josh
> >
> > > -----Original Message-----
> > > From: [email protected] [mailto:
> [email protected]]
> >
> > > On Behalf Of Brian FitzGerald
> > > Sent: Wednesday, January 07, 2009 9:03 AM
> > > To: transfer-dev
> > > Subject: [transfer-dev] Re: back button update transfer object
> >
> > > Thanks for the ideas fellas!
> >
> > > I ended up just "re-grabbing" the TO in the scenario that it already
> > > existed in the db and then populating it w/ the form data:
> >
> > > if( exists(quizResult) )
> > > {
> > > persistedQuizResult = transfer.get("quiz.QuizResult",
> > > quizResultId);
> > > persistedQuizResult.populate(qrDataFromForm);
> > > transfer.update(persistedResult);
> > > }
> >
> > > else
> > > {
> > > transfer.create(quizResult);
> > > }
> >
> > > This way the QuizResult knew it was persisted so when I went to run an
> > > update it didn't have any problem.
> >
> > > Thanks again,
> > > Brian
> >
> > > On Jan 6, 7:16 pm, "Mark Mandel" <[email protected]> wrote:
> > > > That is true.. you could preset the ID of the object... therefore if
> > > > you go back, you know what it should be the 2nd time around... that
> > > > would work.
> >
> > > > Mark
> >
> > > > On Wed, Jan 7, 2009 at 11:14 AM, Alan Livie <[email protected]>
> wrote:
> > > > > Not Transfer related but if you use a UUID as a hidden form field
> and
> > > save
> > > > > this too if a form is re-submitted you can ignore the insert IF the
> UUID
> > > > > already exists in the database.
> >
> > > > > ________________________________
> > > > > From: Dan Wilson <[email protected]>
> > > > > To: [email protected]
> > > > > Sent: Tuesday, January 6, 2009 8:54:05 PM
> > > > > Subject: [transfer-dev] Re: back button update transfer object
> >
> > > > > How I handle it in 95% of cases is do a redirect to a neutral page
> once
> > > the
> > > > > form was successfully submitted.
> >
> > > > > <cflocation> for the win!
> >
> > > > > dw
> >
> > > > > On Tue, Jan 6, 2009 at 3:47 PM, Mark Mandel <[email protected]
> >
> > > wrote:
> >
> > > > >> Brian,
> >
> > > > >> This is more of an application design / user training question.
> >
> > > > >> If a user hits the back button, then they go back to the 'create
> new'
> > > > >> screen... which has no idea what was previously entered.
> >
> > > > >> So if they hit submit again, your app has no way to know what
> their
> > > > >> last insert was.
> >
> > > > >> How you handle this, I think is going to be really up to the needs
> of
> > > > >> your application.
> >
> > > > >> Mark
> >
> > > > >> On Wed, Jan 7, 2009 at 6:15 AM, Brian FitzGerald
> > > > >> <[email protected]> wrote:
> >
> > > > >> > Hey guys, any thoughts are appreciated ...
> >
> > > > >> > When a user submits a quiz, my QuizResult transfer object is
> saved -
> > > > >> > transfer.save(QuizResult)
> >
> > > > >> > The problem occurs when the user hits "back" to fix their
> answers and
> > > > >> > resubmit ... at this point transfer runs save again, but instead
> of
> > > an
> > > > >> > update, it tries to do another create. This generates a SQL
> error
> > > > >> > since it tries to insert a duplicate record ... the TO doesn't
> > > realize
> > > > >> > it's already persisted
> >
> > > > >> > in order to force transfer to run create or update in the
> correct
> > > > >> > scenario, I stuck in an "exists" method ...
> >
> > > > >> > if( exists(quizResult) )
> > > > >> > {
> > > > >> > transfer.update(quizResult);
> > > > >> > }
> > > > >> > else
> > > > >> > {
> > > > >> > transfer.create(quizResult);
> > > > >> > }
> >
> > > > >> > but this is still giving me problems because, after hitting the
> back
> > > > >> > button, the transfer object still thinks it isn't persisted even
> when
> > > > >> > it is, so while it does run "update", it also blows up: "The
> Transfer
> > > > >> > Object of type 'quizResult.QuizResult' has not been created in
> the
> > > > >> > database"
> >
> > > > >> > Can anyone point me in the right direction on this? Thanks in
> > > advance
> >
> > > > >> --
> > > > >> E: [email protected]
> > > > >> W:www.compoundtheory.com
> >
> > > > > --
> > > > > "Come to the edge, he said. They said: We are afraid. Come to the
> edge,
> > > he
> > > > > said. They came. He pushed them and they flew."
> >
> > > > > Guillaume Apollinaire quotes
> >
> > > > --
> > > > E: [email protected]
> > > > W:www.compoundtheory.com
> >
>
--
Nando M. Breiter
The CarbonZero Project
CP 234
6934 Bioggio
Switzerland
+41 76 303 4477
[email protected]
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---