--- "Craig R. McClanahan" <[EMAIL PROTECTED]> wrote: > > > On Wed, 16 Jul 2003, Ranjangaonkar, Vaibhav (HQP) wrote: > > > Date: Wed, 16 Jul 2003 12:56:09 -0700 > > From: "Ranjangaonkar, Vaibhav (HQP)" <[EMAIL PROTECTED]> > > Reply-To: Struts Developers List <[EMAIL PROTECTED]> > > To: Struts Developers List <[EMAIL PROTECTED]> > > Subject: RE: DynaActionForm.getMap() change > > > > My 0.2 cents - > > I think, idea to provide getMap() method is great ! > > Yes, to solve the performance problem, I think, then > > We will have to keep track when underlying map has > > Changed. Then, create unmodifiable map only if it changed > > Since the last time... > > > > The current implementation already has getMap() -- the problem is that > it > returns the real HashMap that is internally used to store property > values, > which exposes those values to being modified by means other than through > the DynaActionForm methods. > > I don't like the performance impact of creating a new wrapper instance > on > every call to getMap(), however -- that can happen lots of times in a > page. It's probably possible to create the wrapper once and then cache > it > (to reduce the impact somewhat), but it is still a spurious object > creation.
I considered caching as well but thought the implementation might get a bit ugly. It also doesn't help the form.map.prop issue. > > > Actually, this is a common java idiom, I think. Whenever > > We need to expose a collection from a class, we should > > return unmodifiable variant of it so that encapsulation > > doesn't break, but then, we have performance issue, as > > David said... > > > > Thanks. > > The reason to think about doing it is usability, which sometimes needs > to > win out over O-O purity :-). I often argue from the OO purist perspective (if you hadn't guessed by now :-). However, sometimes that's just playing devil's advocate. I think the usability issue here probably justifies DynaActionForm implementing Map. Is there any other way of acheiving form.prop for a DynaActionForm? If we do implement Map we should note in the reasons in the javadoc so it's less confusing for extenders/customizers. David > > All of the Struts tags, because they use commons-beanutils under the > covers, treat DynaBean beans and standard JavaBeans identically -- the > internal implementation knows exactly what to do. So you can say things > like: > > <html:bean:write name="customer" property="firstName"/> > > Now, assume you've got a page author that wants to switch and use JSTL > EL > expressions instead. Their natural first inclination is going to be to > write: > > <c:out value="${customer.firstName}"/> > > which will work fine for a standard JavaBean, but not fine for a > DynaBean. > If it *happens* to be a DynaActionForm, you can work around this by > saying: > > <c:out value="${customer.map.firstName}"/> > > because we added getMap() to DynaActionForm. This is really confusing > to > newcomers, and would be unnecessary if we went to DynaActionForm > implementing Map. Then, the user's initial guess at how to write the > expression would have been correct. > > Given that JSP 2.0 makes EL expressions available everywhere in a page, > so > that you'd be able to write just this instead: > > ${customer.firstName} > > then I think the usability issue is strong enough that we should look at > making DynaActionForm implement Map so that it plays nicely with all EL > expressions. > > SIDE NOTE: In JavaServer Faces, the APIs let you customize a thing > called > the PropertyResolver, which is the piece of code that interprets the "." > or "[]" operators in an EL expression. In the most recent release of > the > Struts-Faces integration library, I took of advantage of this and > implemented support for DynaBeans -- but that only works for value > reference expressions in Faces components, not in other uses of EL in > the > page. > > Craig > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > __________________________________ Do you Yahoo!? SBC Yahoo! DSL - Now only $29.95 per month! http://sbc.yahoo.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]