> On 11/7/05, Gary VanMatre wrote: > > > > > On 11/7/05, Gary VanMatre wrote: > > > > > > > > >So, are you thinking that "#{shale:managed-bean-name.save}" would be > > > > >something that would evalutated entirely within a custom shale jsf > > > > >VariableResolver or would the symbol replacement be done in the clay > > > > chain ( > > > > >i.e. replaceMnemonic) and then passed to the standard > > VariableResolvers? > > > > > > > > A custom VariableResolver is what I was thinking. The variable > > resolver > > > > would use the symbol table cached in thread scope to resolve the > > symbols. > > > > > > > > I'm hoping that Craig will be able to help out on this one:-) > > > > > > > > > Ryan's idea is definitely a good one. And it raises a quick question ... > > is > > > the ClayContext already stored as a request attribute under name > > > "clayContext"? If so, we might not need much help at all. > > > > > > > Nope, it's not but wouldn't hard to push it there. Something I'm not > > certain about is when a variable resolver would be invoked. Is it when the > > binding object is created or when the binding is invoked? If it's when the > > binding is created, I think that request scope would work out. Otherwise, I > > believe there will be a scoping issue. > > > It's invoked when you evaluate the expression, not when the binding is > created, so things should work fine. >
Sorry, I didn't do a very good job of explaining. I was trying to describe the recursiveness of the XML where symbols defined in a outer scope are passed on to nested components but nested components can override. <component jsfid="street" extends="inputText"> <attributes> <set name="styleClass" value="#{shale.attributes.class}"/> <set name="value" value="#{shale.managed-bean-name.street1}"/> </attributes> <symbols> <set name="class" value="defaut"/> </symbols> </component> <component jsfid="addressPanel" extends="panelGrid"> <attributes> <set name="columns" value="1"/> </attributes> <element renderId="0" jsfid="baseInput" id="street1"/> <element renderId="1" jsfid="baseInput" id="street2"> <symbols> <set name="class" value="override"/> </symbols> </element> </component> In this example, street1 should have a 'styleClass=default' and street2 will have a 'styleClass=override'. Unless the "class" symbol was saved multiple times in the request with a unique name, the last value would take precedence. > When the AssignChildrenCommand is invoked, it builds the current symbol > > table. This is "scoped" for the creation of the child. The component symbol > > metadata (ComponentBean.getSymbols()) overrides anything in an outer > > scope. If the child is a nested clay component, the managed bean name will > > also override the current value in the symbol table. Since the symbol > > replacement happens before the binding expression is established, the > > resulting value is kept by the component. > > > Sounds good. > > > Craig > > > > > > > Gary > > > > Craig > Gary