From: Marc B. <ma...@ad...> - 2003-08-01 09:22:07
|
Hi to the list - my first post to this auspicious group. We've finally decided to commit 100% to WOnder, largely for the ERD2W stuff and the excellent improvements in the rule engine, logging, and debugging that it brings. The extra components and code are just a great bonus for us. Thankyou to all, particularly Max (it was cool to meet you at WWDC last month), for this WOnderful body of work. (I say again, D2W rocks) So... refactoring our frameworks and apps to fit the ER 'way', I've run across a couple of small problems. We have our own component framework, IPDirectToWeb that augments the ERDirectToWeb and DirectToWeb frameworks. The java package is net.iparadigm.ipdirecttoweb. It implements KeyValueCodingProtectedAccessor to ensure cross-package access. Making use of all of these is our application package, net.iparadigm.directtoweb. I'm attempting to subclass the ERD2WEditableListPage as IPD2WTableEditPage, and finally subclass that to IPD2WTableEditPageTemplate following the ER replaceable look and feel model. Finally, I copied ERD2WEditableListPageTemplate.wo over to my own project's IPD2WTableEditPageTemplate I've done this successfully with ERD2WQueryPage and other classes, so I thought I was on the right track. The component renders normally if I give it a zero item list - it makes no unusual KVC requests of course in that case, except to resolve d2wContext.displayNameForEntity, which it does quite happily. I inserted a ERDDebuggingHelp component in the empty list case to verify that it is indeed my component that is being rendered with the right pageConfiguration, entity and so on. However, at runtime, I get back a com.webobjects.foundation.NSKeyValueCoding$UnknownKeyException. Specifically, valueForKey(): lookup of unknown key: 'dummy' 'dummy' is the binding for a hidden text field in the .wo, but notably it's declared protected. As a result, 'dummy' is invisible to the cross-package subclass. Removing the HiddenField element makes life good again. Q1: So does 'dummy' really need to be there? I figure not. The second issue we have with this component is that it assumes it's modal - that it will never be rendered as a sub-component. As a result the whole ErrorDictionary thing is questionable. The page only constructs enough error dictionaries for the number of items initially passed to it in the displayGroup. Once _errorMessagesDictionaries is initialised, the dg is never checked again. My app makes a lot of use of Query/List components on the same page. currentErrorDictionary breaks immediately if you have, say, 5 items initially in the dg, then a subsequent query yields 6 EOs. currentErrorDictionary is going to gak with a subscript out of bounds exception the moment you try to render the component. Somehow I need to workout when the dg has changed and execute clearValidationFailed at that time in order to kill the old dictionaries and make way for new ones to be created. I really don't want to have to keep a dg copy around for the comparison. Another way might be to somehow pass in a message from the containing component - but I don't know how to do that yet since I just switched to WOnder and I know you can't do that using the standard WOSwitchComponent. Q2: Any suggestions as to the right way to do this please? I'll post the code once I fix it. Thanks, Marc Currently Canadian, always Australian |