ColdFISH is developed by Jason Delmore. Source code and license information available at coldfish.riaforge.org <cfcomponent>
<cffunction name="validate" returnType="ModelGlue.Util.ValidationErrorCollection">
<cfargument name="formFields">
<cfset var val = createObject("component", "ModelGlue.Util.ValidationErrorCollection").init() />
<cfif structKeyExists(formFields, "address1") AND not len(trim(formFields.address1))>
<cfset val.addError("address1", "Please enter the first line of your address.") />
</cfif>
</cffunction>
</cfcomponent>1<cfcomponent> 2<cffunction name="validate" returnType="ModelGlue.Util.ValidationErrorCollection"> 3<cfargument name="formFields"> 4 5<cfset var val = createObject("component", "ModelGlue.Util.ValidationErrorCollection").init() /> 6 7<cfif structKeyExists(formFields, "address1") AND not len(trim(formFields.address1))> 8<cfset val.addError("address1", "Please enter the first line of your address.") /> 9</cfif> 10</cffunction> 11</cfcomponent>
I know this is a very old blog posting but I came across it while trying to diagnose a problem that is resulting from me taking a similar approach to validation of data. I am curious how do you end up displaying the validation errors for the user?
I had been doing this in my ModelGlue.xml : <results> <result name="ValidationError" do="registrationForm" redirect="false" /> <result do="view.template" /> </results>
My problem stems from that redirect being false though. I noticed that when I do that, my main template gets queued more than once in the MG debug information. This is causing my CFMenuItems to get some minor duplication. If I set the redirect to true then the page renders 100% correctly but then I no longer have access to the validation structure.
Interesting enough my ViewState.getValue('LASTNAME') still returns what I typed in with the return type set to true or false.
This is how I do my validation now. Basically I have the form loop back on to its own event. At that point I run the validation rules. If they fail then I redisplay the view, otherwise I redirect them to the next page.
<!-- Have the form loop back on to this event --> <event-handler name="DisplayCustomerDetailsEvents"> <broadcasts> <!-- This only runs when the form has been submitted --> <message name="validateCustomerDetails" /> </broadcasts> <results> <result do="view.template" /> <!-- If validateCustomerDetails() is successful then move on --> <result name="success" do="successful" redirect="true" /> </results> <views> <include name="body" template="direct/dspCustomerdetails.cfm" /> </views> </event-handler>
I was doing something similar to that, what I noticed last night is it was the duel result elements that were causing the issue. What I did to get around that is when I had <result do="view.template" /> I added the name="success" to that. Seemed to have fixed my issue although I might play with it later today and see about changing them to something more inline with what you have done.