> INTRODUCTION
>
> Clay has a simple mechanism for component extending. The component can
> inherit and override the attributes of the "super-components" (analog to
> super-classes). For example,
>
> <component jsfid="inputText" componentType="javax.faces.HtmlInputText"/>
>
> <component jsfid="formInputField" extends="inputText" allowBody="false">
> <attributes>
> <set name="styleClass" value="inputControlStyle" />
> <set name="required" value="true" />
> </attributes>
> </component>
>
> <component jsfid="firstName" extends="formInputField">
> <attributes>
> <set name="value" value="#{managed-bean-name.firstName}"/>
> </attributes>
> </component>
>
> <component jsfid="lastName" extends="formInputField">
> <attributes>
> <set name="required" value="false" />
> <set name="value" value="#{managed-bean-name.lastName}"/>
> </attributes>
> </component>
>
> The html tag is on the top of this hierarchy:
>
> <input type="text" size="20" jsfid="firstName" />
>
> PROBLEMS
>
> ### 1.### The overriding mechanism works partly in case of mapping html
> attributes to result component attributes.
>
> Some of the attributes are passed to the result component, some of them are
> omitted.
> For example,
> <input type="text" jsfid="firstName"
> value="#{managed-bean-name.lastName}" />
> does not work, because value from the html input tag is just omitted. At the
> same time, in case of
> <input type="submit" jsfid="submitForm" value="#{bundle.SubmitName}" />
> the 'value' overrides the 'value' in the submitForm.
>
> ### 2. ### Almost impossible to re-use the existing component from the
> library. The explicitly created component is required. For example,
> instead of just:
> <input type="text" jsfid="inputText"
> value="#{managed-bean-name.lastName}"/>
>
> we have to write in html:
>
> <input type="text" jsfid="firstName" />
>
> and in the clay config file:
>
> <component jsfid="firstName" extends="inputText">
> <attributes>
> <set name="value" value="#{managed-bean-name.firstName}"/>
> </attributes>
> </component>
>
> ### 3. ### Undesirable overriding.
>
> As I mentioned above, in case of
> <input type="submit" jsfid="submitForm" value="Button 1" />
> the 'value' is passed to the component overriding the 'value' in the
> component declaration.
>
> Scenario:
> web designer has created a mockup that contains some buttons and wants to
> keep the title on the buttons as designed for further possible re-design.
> page writer should take the actual title on the buttons from the bundle or
> manage beans properties. However, the declaration:
>
> <component jsfid="submitForm" extends="commandButton">
> <attributes>
> <set name="value" value="#{bundle.SubmitName}" />
> <set name="action" value="whatever" />
> </attributes>
> </component>
>
> does not work without removing 'value' from the html tag.
>
> So, we need a way how to disable overwriting in the particular cases
>
> PROPOSALS
>
> #### 1. ####
> Allow to pass any html attributes to the result component by default
> (excluding jsfid itself and taking carry about problematic html attribute
> names like class, char, for).
>
> All the attribute should allow the JSF EL syntax with
> useValueLateBinding="true" by default. (I suppose, it should be "true" by
> default in general, but it is another story)
>
I like this idea but I think we should combine it with Craig's suggestion in
the earlier thread. Let's provide an object that can be optionally overridden
as a configuration parameter that has the mapping of html elements to component
attributes.
This would mimic the same pattern the DefaultViewControllerMapper uses to
associate a viewId with a registered managed bean ViewController.
> Additionally: It would be nice if JSP 2.0 EL is also supported
>
Not sure what this would entail?
> ### 2. ####
>
> Allow to define new attributes (over the html syntax) and pass them to the
> result component. For example,
> <span jsfId="outputText" value="#{bundle.firstNamePrompt}" />
>
If a component doesn't provide a matching component property it logs it as an
error and assumes it's a component attribute. I think this flexibility would
be nice to have.
> ### 3. ####
>
>
> Introduce the new attribute for tag <set> that names allowOverriding that
> might disable the subsequent overriding. The default value should be true.
> In this case we can resolve the conflict mentioned in the #3# : scenario.
> I.e.
>
+1
Sergey, these all seem like great enhancements. I'm willing to provide the
patches if others are supportive too.
Gary
> html:
>
> <input type="submit" jsfid="submitForm" value="Button 1" />
>
> clay config file:
>
> <component jsfid="submitForm" extends="commandButton">
> <attributes>
> <set name="value" allowOverriding="false"
> value="#{bundle.SubmitName}" />
> <set name="action" value="whatever" />
> </attributes>
> </component>
>
> The same way can be used to omit the particular attribute if it is
> necessary. For example,
>
> html:
>
> <a href="#" jsfid="formLink" />
>
> clay config file:
>
> <component jsfid="formLink" extends="commandLink">
> <attributes>
> <set name="action" value="showData" />
> <set name="href" value="" />
> </attributes>
> </components>
>
>
> This solution is on top of my head. Probably, you guys who know the clay
> code well already keep in mind the better one.
>
> === P.S. Good Stuff =======
>
> Currently, the Clay allows to use the "span" tag as a base for any
> component.
> For example, you can write:
>
> <input type="submit" jsfid="submitForm" value="Button 1" />
>
> or
>
> <span jsfid="submitForm">
> <input type="submit" value="Button 1" />
> </span>
>
> The second approach is a good way to decouple the component from the html
> mockup if it does not fit well the result component.
> I.e. if we do not want to have a lot of allowOverriding="false", we just
> can use the span wrapper and provide own version of the attributes set
>
> --
> Sergey
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]