Hi,
Today I was playing with the scaffolding feature of MG with CF9 Hibernate ORM. Everything worked well but I didn't get MG to update a record, instead it kept adding the modified record. It took me a while to find out I had to add the record's primary key in the editform so that when the form with the modified data is submit, Hibernate knows it has to update the record instead of create a new one.
One of the things I tried before this dawned to me was to override the scaffolds "commit event by doing this:
<modelglue>
<scaffold object="vrienden" type="delete,edit,list" event-type="mainLayout" />
<scaffold object="vrienden" type="Commit" event-type="mainLayout">
<broadcasts>
<message name="vrienden.commit" />
</broadcasts>
<results>
<result do="vrienden.list" />
</results>
</scaffold>
</modelglue>
and including this in my ModelGlue.xml:
<controllers>
<controller id="vrienden" type="modelglueapplicationtemplate.controller.vrienden">
<message-listener message="vrienden.commit" function="commit" />
</controller>
</controllers>
</modelglue>
(I split up the main ModelGlue.xml file in separate files and include those with the <include template="/ModelGlueIncludes/xxx.xml" /> tag in ModelGlue.xml.)
To see if this worked, I added a <cfdump> in controllers/vrienden.cfc:
<cffunction name="Commit">
<cfargument name="event">
<cfdump var="#event#"><cfabort>
</cffunction>
But this dump never showed up upon committing the editform. Instead a new record was added or, when I found out about the pk, the existing record was modified.
When I removed the line
<scaffold object="vrienden" type="Commit" event-type="mainLayout">
and I had an event handler defined in ModelGlue.xml for the event "vrienden.commit", that got executed fine.
So resuming it looks like:
- the scaffold tag will create the event-handlers specified in it's type attribute or all event-handlers (list,edit,view,commit,delete) when no type attribute is specified;
- when specifying a subset of event handlers in the <scaffold> type attribute and issuing a request with the missing event-handler MG returns an error message that the event handler is not defined (e.g. <scaffold type="list,edit,delete" ...> and issuing a request to /?event=vrienden.commit);
- when adding a separate scaffold tag for the missing event, MG ignores the <broadcast>,<results> or <view> subtags. Instead it behaves as if the missing tag type was added to the scaffold's type attribute.
E.g.
<scaffold object="vrienden" type="delete,edit,list" event-type="mainLayout" />
<scaffold object="vrienden" type="commit" event-type="mainLayout">
<broadcasts>
[...]
</scaffold>
behaves the same as
<scaffold object="vrienden" type="delete,edit,list,commit" event-type="mainLayout" />
Changing the value of Coldspring.xml <defaultScaffolds> tag to not include the "commit" event handler made no difference. Changing the order I included my ModelGlue.xml files in the main ModelGlue.xml made no difference either.
I checked the docs at
http://docs.model-glue.com/wiki/HowTos/HowToUseScaffolds#Scaffolds. Am I misinterpreting or overlooking something here?
Thanks,
Marc