> > > 
> > > This will become even more important in a JSF 1.2 world, because the EL 
> > > expression evaluation machinery has been pulled out into its own spec 
> > (and 
> > > its own package namespace) that can be used completely independently of 
> > the 
> > > web tier. Off the top of my head, maybe something like: 
> > > 
> > > #{shale:attribute.managed-bean-name} 
> > > 
> > > or 
> > > 
> > > #{shale:attribute.class} 
> > > 
> > > ? 
> > 
> > I like the looks of that but how would we handle the managed bean name? 
> > #{#{shale:attribute.managed-bean-name}.address1} 
> 
> 
> Note that my original example should probably have been 
> 
> #{shale:managed-bean-name} 
> 
> because we're not actually talking about an attribute here. 
> 
> The issue you raise, of course, is that you're actually trying to replace 
> part of the expression itself (rather than the whole thing). But, maybe that 
> isn't really necessary? Maybe the evaluaton of the "shale:managed-bean" part 
> of the following expression could return the real managed bean *instance*, 
> instead of just it's name? Then you'd just use: 
> 
>  set name="action" value="#{shale:managed-bean.saveAction}"/>
> 
> on a button component, without needing any textual substitution of the 
> expression itself. 
> 

Ok, I see what you mean now.  That looks good, has some style.

> For the class substitution case that conditionally sets styleClass only if 
> class is actually specified, either the element would need to be smart 
> about knowing whether there was really a value there, or we could do a "set 
> if" operation that only performed the set if the expression evaluated to 
> something other than null or empty string: 
> 
>   <set-if name="styleClass" value="#{shale:attribute.class}"/>
> 
> where the expression would evaluate the value of the "class" attribute, if 
> it exists, and perform the set only if a non-null non-empty-string value was 
> returned by evaluating the expression. 
> 

That's a interesting idea.  Or, we might be able to use a new "bindingType" in 
the "set" node.  But, a "set-if" might be more descriptive.

> Doing this kind of thing would require some interesting logic in the custom 
> variable resolver and property resolver implementations, to allow evaluation 
> of things like "shale:managed-bean" and "shale:attribute" to do the right 
> things. But, storing context information in a thread-local variable would 
> likely be up to the task. 
> 

The symbol info and the current attributte is already being pushed to the 
Command context, ClayContext.  
We could change the ClayContext to use thread scope.

> Hmm ... I wonder if we could eliminate the need to explain what 
> "useValueLateBinding" is all about, using similar thinking? 
> 

I removed that silliness a few weeks ago and made it more like how the JSF 
component attributes are described.  
I replaced it with a bindingType attribute:

<!--
   The BindingType enumeration defines how Expression Language (EL) binding is 
   handled.
   VB - Use Value Binding
   MB - Use Method Binding
   None - No use of EL.  The value passes through
   Early - EL evaluated before setting the component property/attribute.  
-->
<!ENTITY % BindingType "(VB|MB|None|Early)">

> Craig 
>

Gary
 

Reply via email to