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

Reply via email to