There were no objections, we will go forward with the changes and include deprecated code to support the old methods (with warnings).
I will create a JIRA issue to monitor this request. -Andrew On Jan 30, 2008 5:12 PM, Andrew Robinson <[EMAIL PROTECTED]> wrote: > Just had some offline feedback, and would like to revise my proposed > change as I support the feedback. > > New proposal: > > For every multiple colon prefix: > > - If the current component is a naming container, use the parent > naming container > - Otherwise, find the parent of the current NC > > Example use case to illustrate most of the possible permutations: > <f:subview id="A"> > <tr:commandButton id="B" /> > <tr:table id="C" partialTriggers="::B E G ::H:I:K ::H:N"> > <tr:column id="D"> > <tr:commandButton id="E" /> > <tr:inputText partialTriggers="::B E G ::C ::H:I:K ::H:N" /> > </tr:column> > <tr:column id="F"> > <tr:commandButton id="G" /> > </tr:column> > </tr:table> > <f:subview id="H"> > <tr:table id="I" partialTriggers=":::B :::C:E :::C:G K M ::N"> > <tr:column id="J"> > <tr:commandButton id="K" /> > </tr:column> > <tr:column id="L"> > <tr:commandButton id="M" /> > <tr:inputText partialTriggers=":::B :::C:E :::C:G K M ::N" /> > </tr:column> > </tr:table> > <tr:commandButton id="N" /> > </f:subview> > </f:subview> > > I have been asked to see if we can put this change through, so I am > putting it to a vote. Please vote if you agree on this change (will give the > standard 72 hour window so everyone can have a say): > > +1 : yes I want this change > 0: I don't care > -0.5: I don't really like it, but I won't stand in the way (and reason) > -0.9: I hate this, but I won't veto it (and reason) > -1: veto and why > > -Andrew > > On Jan 30, 2008 3:14 PM, Andrew Robinson <[EMAIL PROTECTED]> > wrote: > > > Sorry that this email is long, but it is a sensitive issue, so please > > read on. > > > > https://issues.apache.org/jira/browse/TRINIDAD-757 > > > > was reported because the behavior of the code did not match the JavaDoc > > description. > > > > Thread: http://tinyurl.com/373smc > > > > At that time, it was decided by others that changing the JavaDoc would > > be easier that changing the code. > > > > The question became -- should "foo" work like UIComponent.findComponent() > > or should it look it the parent component. > > > > I have had feedback from people using Trinidad, that the change is > > breaking current code, so the argument for not breaking ppl. by changing the > > JavaDoc has not panned out. > > > > Take this example: > > <f:subview id="A"> > > <tr:group id="B"> > > <tr:panelGroupLayout id="C"> > > <tr:panelBox id="D"> > > <tr:commandButton id="E" /> > > <tr:table id="F" partialTriggers="#{pt}"> > > <tr:column> > > <tr:commandButton id="G"/>... > > > > Currently, if I want to F to trigger on G, I have to use #{pt} = "F:G". > > If I want F to trigger on E, I have to use #{pt} = "E": > > > > <tr:table id="F" partialTriggers="E"> > > <tr:table id="F" partialTriggers="F:G"> > > > > Not only is this confusing (well all solutions are a bit confusing > > admittedly), but really bad for performance. > > > > If #{pt} = "F:G", this is the code that happens (NC means > > NamingContainer. "--" refers to the result): > > > > comp = "F".getParent(); -- comp == "D" > > check if comp is NC -- false > > > > (repeat comp.getParent(), test for NC) > > finds "A" > > > > now call "A".findComponent("F:G") > > UIComponent searches in this order to find "F": > > A, B, C, D, E, F > > (note that this code is broken if the JSF 1.2_04-p02 RI > > UIComponentBase.findComponent() but is correct in MyFaces 1.1.5: > > https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=690) > > > > Now it searches all the children of F to find G > > > > This code has way too much overhead. I was already at "F", why do I have > > to search for it? > > > > > > What would be cleaner: > > <tr:table id="F" partialTriggers="::E"> > > <tr:table id="F" partialTriggers="G"> > > > > In the current implementation "::E" and "E" are identical! > > > > In the "cleaner" approach "::E" and "E" are only identical if the > > current component is not an NC. > > > > If you read the UIComponent docs: > > http://tinyurl.com/2dfak5 > > > > You will see that for the code > > comp.findComponent("foo") > > if comp is an NC, then it will check if comp is foo, or find the child > > that is foo. > > > > partialTriggers differs from this. That means that if a developer > > understands the JSF method, they will not expect the partialTriggers > > implementation. > > > > What I (and a few of my co-workers) would prefer as the definition of > > partialTriggers: > > > > - If the search expression begins with a single ':', the base will > > be the root UIComponent of the component tree. The leading separator > > character will be stripped off, and the remainder of the search > > expression > > will be treated as a "relative" search expression as described below. > > - Otherwise, if this UIComponent is a NamingContainer it will > > serve as the basis. > > - Otherwise, search up the parents of this component. If a > > NamingContainer is encountered, it will be the base. > > - Otherwise (if no NamingContainer is encountered) the root > > UIComponent will be the base. > > - If the search expression starts with multiple ':' characters: > > - For each ':' beyond the first, find the parent component > > that is a NamingContainer. Therefore ':::comp' will begin the > > "relative" > > search from the NamingContainerthat is a ancestor of the > > NamingContainer > > that comp is a child of. > > > > The search expression (possibly modified in the previous step) is now a > > "relative" search expression that will be used to locate the component (if > > any) that has an id that matches, within the scope of the base component. > > The match is performed as follows: > > > > - If the search expression is a simple identifier, this value is > > compared to the id property, and then recursively through the facets and > > children of the base UIComponent (except that if a descendant > > NamingContainer is found, its own facets and children are not searched). > > - If the search expression includes more than one identifier > > separated by ':', the first identifier is used to locate a > > NamingContainer > > by the rules in the previous bullet point. Then, the findComponent() > > method > > of this NamingContainer will be called, passing the remainder of the > > search > > expression. > > > > This would improve performance, actually give a purpose to "::foo" and > > be in sync with the method of searching for a component based on the JSF > > specification. > > > > Since we know current code is already broken, I do not feel that > > "maintaining backward compatibility" is a valid reason to say no. > > > > Thanks, > > Andrew > > > > PS - Wow, hard to believe you read all that, thanks! (or did you just > > scroll to the end :-) ) > > > > > > > > > > > > > > > > > > >