Hello, comments are inline...
----- Original Message ----- From: Gary VanMatre [mailto:[EMAIL PROTECTED] To: [email protected] Sent: Fri, 28 Jul 2006 03:23:37 +0200 Subject: Re: "binding" attribute of JSF standard components > >From: René Zanner <[EMAIL PROTECTED]> > > > > Hi all, > > > > unfortunately the "binding" attribute isn't standard for all JSF > components. > > Will that change in the future? I think it's a required attribute when > trying to > > be conform to the JSF standard... > > > > I believe that the next version of JSF, 1.2, will make the Converter, > Listener and Validator have a binding attribute. In 1.1, it's only > components. This will be a really nice feature. > > > > > Otherwise I'm forced to inherit from the standard components provided by > clay > > just to provide the "binding" attribute: > > > ><component jsfid="my:dataTable" extends="dataTable"> > > <attributes> > > <set name="binding" value="@binding" /> > > </attributes> > ></component> > > > > Actually, you don't have to extend an existing definition to define a new > attribute. The inheritance you see in the default clay-config.xml is only > taking advantage of the metadata inheritance for reuse. > > > http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/resources/META-INF/clay-config.xml?view=markup > > > When you extend an existing "top-level" component definition, it inherits > the attributes of it's parent definition. The attribute has three > "attributes", name, value and bindingType. The "name" attribute is required > but the other values will be inherited or can be overridden by the extending > component definition. > Hey - that's cool that "binding" made it into the new top-level component definition "baseComponent"! In my current version of Shale this component definition is missing (together with the binding attribute). Maybe it was added only recently, but - hey! - that's developing on the edge of technology ;o) ... > > There are three enumerations of bindingType. This value tells the clay > component how to handle attributes that contain EL. > 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. > Most of the component properties are value binding (VB). The method binding > (MB) is really more for documentation. We have to know what type of > parameters are required for MB. There are hard-coded assumptions. For > example we know an attribute named "action" is a method binding expression. > > The Early type would be like a JSP tag evaluating the expression before it's > passed on to the component and the None option mean not to inspect for EL, > just pass the sting onto the component. > > > > Is it possible to enforce it being a Value Binding (e.g. via > bindingType="VB"?)? > > Other values are not allowed since the value must refer to a UIComponent > > attribute of a backing bean. > > > > > The attribute value of bindingType is the enforcement. It's kind of like > the TDL in JSP terms. > By saying "enforced" I meant "enforced at runtime". So, is the bindingType enforced at runtime? When there's no value binding given for an attribute of bindingType "VB", I'll get an exception? > The component definition is bound to the html node by jsfid (there are also > 11 implicit mappings). Attributes in the html nodes overrides/extends > attributes in the component definition. Attributes defined in the html node > that are not defined in the component definition are made into symbols. > > > > Without this attribute I cannot use something like this in my HTML views: > > > > > ><table jsfid="my:dataTable" binding="#{tableView.dataTable}" ...> > > ... > ></table> > > > > The "binding" is required for dataTable when trying to access the > currently > > selected row after clicking on a command link in a specific row. In this > case > > the row clicked on is contained in the attribute "rowData" of the > dataTable: > > dataTable.getRowData() gives the Object associated with the row in which > > occurred the mouse click. > > > > Ah, that's a good tip. I never thought about handling it that way. That > would > make your links very clean. That's better than having to define param's. > > > > Cheers, > > > > René > > Gary > René
