On Tue, 2008-07-08 at 10:35 +0200, [EMAIL PROTECTED] wrote: > Leonardo Uribe schrieb: > > > > > > On Mon, Jul 7, 2008 at 11:43 PM, Jihoon Kim <[EMAIL PROTECTED] > > <mailto:[EMAIL PROTECTED]>> wrote: > > > > Hi, > > > > I had some questions while refactoring the code using the annotations > > of myfaces-builder-plugin and was wondering if I was simply using it > > incorrectly or if it is yet to be implemented [since I am currently > > pointing to the snapshot repository of the plugin]. > > > > (1) JSFProperty annotation seems to work intuitively as suggested in > > creating the get + set methods of the properties, but I was wondering > > about the properties for JSFJspProperties + JSFJspProperty. > > > > Since I wanted the components that didn't utilize the fields > > frequently to be pushed to the Map [so to make the code cleaner], I > > was hoping to use these annotations for the fields, but I apparently > > do not see them being generated within the Tag of the components and > > the tld as I thought they would be generated at. > > > > The following annotation is within a blank interface of an abstract > > class to be created as concrete with JSFComponent annotation : > > > > > > @JSFJspProperty > > name = "allowMultipleSelection" > > returnType = "java.lang.String" > > longDesc = "A flag that indicates whether you can allow more > > than > > one item to be selected at the same time." > > > > > > @JSFJspProperties and @JSFJspProperty is used only as a last resource, > > when you want to define a property used on the tld but not defined on > > the component (like "binding" property) or a parent component property > > should not be on the tld of the child component, and you cannot change > > the api of the component like in myfaces core (you cannot add public > > methods to components). If you are working with new components use > > @JSFProperty instead and avoid any usage at possible of @JSFJspProperty. > > But JSFProperty does assume that there is a real field on the component, > which is not what Jihoon Kim wants. > > I was looking at this a couple of weeks ago, and from memory one of the > JSFJsp* annotations really does work fine when you want real properties > declared in the tld (and present as methods on the tag class) but just > want the data pushed into the component's attributes map rather than > stored as a property on the component. So I was going to propose > renaming that annotation to JSFAttribute. Unfortunately I cannot > remember which annotation it was. I'll have a look on my home pc after > work today. > > I guess the alternative is to put a flag on the @JSFProperty annotation > to indicate that it is an "attributes map only" property. But that does > require a real method on the component to attach the annotation to, > which is not right for attribute-map-based properties. Maybe we could > allow an @JSFProperty annotation to be attached to a public static final > string field on the component itself; each component that supports an > attribute really should have a constant defined which other classes can > then use to fetch that attribute from the attributes map. When the > plugin finds a JSPProperty annotation attached to a constant, then it > could set the internal "isAttribute" flag on the corresponding > PropertyMeta object so that we know to skip that PropertyMeta when > generating the saveState/restoreState methods. Thoughts? >
Hmm. The annotation I was thinking of was JSFJspProperty. I already committed the comment that it can be used for declaring component attributes that live only in the attributes map. But I must have misunderstood Leonardo's intention. Looking at the QdoxModelBuilder, there is a comment that this annotation exists only "to solve a problem with binding on JSF1.1" (line 1072). I don't currently understand what that problem might be. Leonardo? It would be interesting to also look at Tomahawk though. Don't we already have quite a lot of components that have properties on the tag that map just into the attributes map, and not to the component? I can't remember for the moment how that is set up, but will try to look tomorrow. Regards, Simon
