On Mar 13, 2012, at 5:53 AM, Fabian Peters wrote: > Hi Ramsey, > > Am 13.03.2012 um 01:49 schrieb Ramsey Gurley: > >> On Mar 12, 2012, at 4:21 PM, Fabian Peters wrote: >> >>> Hi Ramsey, >>> >>>>> swallowed in ERD2WPage since d2wContext().propertyKey() is null. Setting >>>>> the propertyKey from the exception resolves this: >>>>> >>>>> if (d2wContext().propertyKey() == null && erv.propertyKey() != >>>>> null) { >>>>> d2wContext().setPropertyKey(erv.propertyKey()); >>>>> } >>>>> >>>>> Maybe this (or some better solution) should be added to ERD2W? >>>> >>>> I don't remember exactly why I didn't do this, but I think it broke query >>>> validation. Hence why I wanted to make a pluggable validation delegate. >>>> The logic in there has become so overloaded, it's difficult to make >>>> changes without breaking something for someone, somewhere :-) >>> >>> I haven't yet looked into query validation. How could I test this? >> >> I don't remember what broke or how I broke it. It was quite a while ago. >> >> Pushing the propertyKey into the d2wContext there will have other >> consequences though. Taking a second look at the code, it looks like you'll >> get errors if you try this in a nested page that propogates exceptions. > > My understanding of D2W is still quite limited, so I'm not sure I really > understand what this would mean. When would a nested page throw an exception > for which d2wContext().propertyKey() == null in > validationFailedWithException? Could we add a check via > shouldPropagateExceptions() and/or shouldCollectValidationExceptions()? Or > just use a copy of the context?
That would be safer. Something like D2WContext c = ERD2WContext.newContext(oldContext); It's still dirty though. Remember, each nested page has it's own d2wContext. So if you are propagating exceptions to the parent page, you are probably pushing the propertyKey into a context with an entity that doesn't have that property. Example: An OwnerEO has a DogEO which has a numberOfFleas attribute. If your numberOfFleas attribute is the cause of a validation exception and it's propagated up to the OwnerEO page, you'll be pushing numberOfFleas propertyKey onto a d2wContext with an entity and object of OwnerEO. That could end badly depending on what rules are triggered after it happens. Anyway, my gut says don't do it this way :-) It has no brain, but my gut is correct with surprising frequency. > I'm creating quite a few objects in embedded page configurations here and the > code does indeed get called when saving a (valid) new object that is then > getting set up as the destination of the relationship. But the validation > error is not getting displayed, probably because the relevant update > container is not being refreshed. When clicking on next, the validation is > run again and no exception is thrown. > > I've tried this with a classic ERD2WWizardCreationPageTemplate and the result > is the same, i.e. the method is getting called but the exception is not > getting displayed. > >>>>> It seems to me that the whole validationKeys approach is unusable >>>>> otherwise? >>>> >>>> Using validateKeys would be the correct approach. But were you actually >>>> able to display the error with validateKeys on an ERMODWizard page? Last >>>> time I tried that, it didn't work... >>>> >>>> https://github.com/projectwonder/wonder/issues/97 >>> >>> Well, with the modification above it works for me. That's the only thing I >>> had to change for it to work. >> >> Good to know. If no one else is having the issue, I can close it. > > Just to be sure: I do have the issue, modifying ERD2WPage fixes it. When I had the issue, the validation exception was throwing, but it was not showing up in the page. I assumed some part of the ajaxyness was swallowing it and continuing on, because the same worked fine in a look with no ajax. > >>> I still wonder why this missing validation seems not to bother anybody. >> >> I think it's more complicated than that. The property key is not guaranteed >> to be an attribute or relationship. But if you'd like to try something >> different, you can always clone the wizard page template and create your own >> logic. > > Sure, I'm not saying it's a simple thing to do and I certainly don't want to > complain. I didn't mean to imply you were complaining :-) I have my own look framework for this reason. My wizard page doesn't even have a next/previous button on it. Everything is handled through delegates that I can switch out on a whim. Just because something isn't already done in wonder doesn't make it wrong. But at the same time, we can't just change behaviors that others may be dependent on either. > I guess I'm just so impressed with D2W and all the things people have > implemented already that I feel I must be missing something here. It should > be possible to check which property keys are being displayed on the current > tab/step, then check for each of them whether it's a mandatory relationship > and validate accordingly. Devil's Advocate: There's always willUpdate(). How do we know that a mandatory relationship isn't going to be auto-populated by the business logic if left empty? Conversely, how do we know if a propertyKey that's handled by NSKeyValueCoding.ErrorHandling is or isn't mandatory? You'll certainly need more than just the propertyKey to know. > >>> I'd expect validation of mandatory to-ones to "just work". It's no fun if >>> you edit something and on the 7th step you're told you forgot to set a >>> property on the 1st step. Or is there something I'm overlooking? >> >> It would also be no fun if a validation error from step four showed up in >> step one :-) > > ;-) > >> The EO can't be validated until the last step when creating. If you want to >> validate parts of the EO before leaving a step, then validateKeys is >> currently the place to do it. > > Thanks, it's good to know I'm not ignoring something helpful. > > cheers, Fabian _______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com