>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. 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. 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
