>>>>> On Fri, 14 Aug 2015 08:53:35 -0500, manfred riem <manfred.riem_at_oracle.com> said:
MR> Hi all,
MR> I like to bring pass through attributes in line with what the
MR> implementation does here instead of what the current specification says.
MR> See JAVASERVERFACES_SPEC_PUBLIC-1270 for more information.
Spec> Item 2 If the current attribute's namespace is empty or different
Spec> from the argument tag's namespace, let the current attribute be
Spec> convertedTagAttribute. This will have the effect of setting the
Spec> current attribute as an attribute on the attributes map of the
Spec> UIComponent instance represented by this markup.
Spec> Item 3 Otherwise, assume the current attribute's namespace is
Spec>
http://xmlns.jcp.org/jsf/passthrough. ConvertedTagAttribute's
Spec> qualified name is the current attribute's local name prefixed by
Spec> "p:". convertedTagAttribute's namespace must be
Spec>
http://xmlns.jcp.org/jsf/passthrough.
MK> The third item states, that attributes without a namespace
"namespace is empty" is in item 2.
MK> or with a namespace different from the tag's namespace
"different from the current tag's namespace" is also in item 2.
MK> should be attributes of the component (and NOT pass-through
MK> attributes).
MK> This is not in line with the implementation in Mojarra (which is
MK> correct in my opinion!). Mojarra treats all attributes of a
MK> pass-through element without a namespace as pass-through
MK> attributes. This perfectly makes sense as I would consider
MK> attributes without a prefix in a pass-through element as something
MK> belonging to the HTML tag.
MK> With the behavior defined in the spec, this would not work:
Let's pull this apart and follow the steps in TagDecorator [1]. First,
let's be explicit about the namespaces.
<!DOCTYPE html>
<html xmlns="
http://www.w3.org/1999/xhtml"
xmlns:jsf="
http://xmlns.jcp.org/jsf">
MK> <input type="text" jsf:id="name" jsf:value="#{bean.name}"
MK> placeholder="Enter name"/>
* "Inspect the attributes of the tag argument..." does not apply.
* The default TagDecorator has its decorate() method called, with the
Tag passed as the argument.
* We don't throw an exception because <input> is in the
http://www.w3.org/1999/xhtml namespace.
* "input" is treated as the elementName. This leads us to identify
h:inputText as the "target tag" from the table in the javadoc for
TagDecorator.
* Now we start to iterate over the attributes in the markup.
jsf:id="name"
It's namespace is
http://xmlns.jcp.org/jsf, so item 1 applies: make
it be a component attribute. In this case, call
component.setId("name").
type="text"
It's namespace is not
http://xmlns.jcp.org/jsf, so item 1 does not
apply.
It's namespace is empty, so item 2 applies. THIS IS THE SPEC BUG.
It should fall through to item 3.
jsf:value="#{bean.name}"
It's namespace is
http://xmlns.jcp.org/jsf, so item 1 applies.
placeHolder="Enter name"
It's namespace is not
http://www.w3.org/1999/xhtml, so item 1 does
not apply.
It's namespace is empty so item 2 applies. THIS IS THE SPEC BUG.
Now that we've pinpointed the bug, the question becomes what to do about
it? I suggest we change item 2 to be
If the current attribute's namespace is non-empty and different from
the argument tag's namespace, let the current attribute be
convertedTagAttribute.
Delete the next sentance that starts with "This will have the
effect...".
Ed
--
| edward.burns_at_oracle.com | office: +1 407 458 0017
| 55 Business days til JavaOne 2015
| 70 Business days til DOAG 2015
[1] https://javaserverfaces.java.net/docs/2.2/javadocs/javax/faces/view/facelets/TagDecorator.html