jsr344-experts@javaserverfaces-spec-public.java.net

[jsr344-experts] Re: [1111-PassThruElements] DISCUSSION

From: Frank Caputo <frank_at_frankcaputo.de>
Date: Tue, 5 Jun 2012 09:44:39 +0200

Hi Andy,

Am 04.06.2012 um 18:40 schrieb Andy Schwartz:

> Thanks for writing this up Frank.
>
> One concern about this:
>
>> we could convert the fieldset to <fieldset name="twoFields" id="twoFields" jsfc="h:panelGroup" elementName="fieldset"> and the legend to <legend id="legend" jsfc="h:panelGroup" elementName="legend">
>
> Is that it requires duplication of the element name.
>
> What did you think of the idea that Imre and I discussed - ie. doing something like:
>
> <legend id="legend" jsfc="h:element">

The proposal I wrote has minimum impact on the spec, so i didn't mention inventing h:element. What component would you create for h:element? I still think UIPanel does the job fine.

>
> Or maybe some simplification of this, eg:
>
> <legend id="legend" jsfc="true">
> <legend id="legend" jsfc="jsfc">
>
> If we go this route we would need to have some more discussion about how to handle component-level attributes (eg. rendered, id) vs pass through attributes (eg. everything else).

I really like your idea to distinguish between component and passthru attributes having the component attributes namespaced.

I'd like to specify some changes to the jsfc syntax, but I can't find where the actual behavior of the jsfc syntax is specified. Can anybody give me a hint?


Cheers,
Frank


>
> Andy
>
> On 6/4/12 12:20 PM, Frank Caputo wrote:
>>
>> Hello EG,
>>
>> this email has 3 SECTIONS. Find the proposal at the end.
>>
>>
>> SECTION: Answer to Ed's question.
>>
>> I can answer the question with a simple example. Suppose the following simple form where you have a dynamic fieldset and a dynamic legend rendered on ajax requests.
>>
>> <h:form>
>> <fieldset name="twoFields" id="twoFields">
>> <legend id="legend">#{bean.legend}</legend>
>> <h:inputText value="#{bean.text}">
>> <f:ajax execute="@this" render="legend" event="keyup"/>
>> </h:inputText>
>> <h:inputSecret value="#{bean.secret}">
>> <f:ajax execute="@this" render="twoFields" event="blur"/>
>> </h:inputSecret>
>> </fieldset>
>> </h:form>
>>
>> If we added an attribute elementName to the panelGroup, we could convert the fieldset to <fieldset name="twoFields" id="twoFields" jsfc="h:panelGroup" elementName="fieldset"> and the legend to <legend id="legend" jsfc="h:panelGroup" elementName="legend">.
>>
>> If we wanted to do this with composite components, we would have to write 2 composite components, which would be quite complex, to achieve this simple behavior.
>>
>> Since the generic dynamic element behaves exactly the same like the panelGroup, I still propose to simply add the attribute elementName to h:panelGroup.
>>
>> I think, this is a very simple change, having the passthru attributes, and gives the HTML developers a good experience.
>>
>>
>> SECTION: alternative
>>
>> We could do copy and paste and invent a new element which behaves like h:panelGroup with an additional attribute elementName.
>>
>>
>> SECTION: proposal
>>
>> 1. Add the attribute elementName to the VDL doc of h:panelGroup with the following constraints:
>> - name: elementName
>> - required: false
>> - request-time: false
>> - type: javax.el.ValueExpression (must evaluate to java.lang.String)
>> - description: The name of the rendered HTML element. If layout is also specified, elementName takes priority.
>>
>>
>> Cheers,
>> Frank
>>
>>
>> Am 31.05.2012 um 00:05 schrieb Edward Burns:
>>
>>
>>> Hello Experts,
>>>
>>> I've had a hard time following the discussion on passthru elements,
>>> mainly because I was trying to *not* follow it because I was trying to
>>> make progress on passthru attributes. To save all of us time, I
>>> nominate Frank Caputo to craft a cohesive and self-contained proposal,
>>> IF he can answer this question. Why do we need pass through elements in
>>> the first place when you can do something like this?
>>>
>>> Using page:
>>>
>>> <my:componentUsingHtml5 a="b" c="#{d.e}">
>>> <f:actionListener binding="#{d.f}" />
>>> </my:componentUsingHtml5>
>>>
>>> Defining page:
>>>
>>> <cc:interface componentType="javaTopLevelComponent">
>>> <cc:actionListener ...>
>>> <cc:attribute >
>>> ...
>>> </cc:interface>
>>>
>>> <cc:implementation>
>>>
>>> arbitrary html 5 capable content goes here.
>>>
>>> </cc:implementation>
>>>
>>> I'd say that if the composite component feature is not up to the task,
>>> then we should improve it rather than inventing more syntax and giving
>>> our detractors more reason to say we're too complex.
>>>
>>> Sincerely,
>>>
>>> Ed
>>>
>>> --
>>> | edward.burns_at_oracle.com | office: +1 407 458 0017
>>> | homepage: | http://ridingthecrest.com/
>>> | 31 Business days til JSF 2.2 Public Review to EG
>>>
>>>
>>
>>
>