And we should be writing composite components like this:
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns:ui="jsf:facelets" xmlns:cc="jsf:cc">
<cc:interface>
<cc:attribute name="name" required="true"/>
</cc:interface>
<cc:implementation>
Hello, #{
cc.attr.name}
</cc:implementation>
</ui:composition>
The point being, no need for all the HTML wrapper garbage.
I'd even like to get rid of the ui:composition there and perhaps have something like "cc:component" or "cc:tag" as the wrapper.
We can also leverage the default namespace to cut out the unnecessary namespace prefixes:
<?xml version="1.0" encoding="UTF-8"?>
<component xmlns="jsf:cc">
<interface>
<attribute name="name" required="true"/>
</interface>
<implementation>
Hello, #{
cc.attr.name}
</implementation>
</component>
Notice that I'm not really changing all that much in JSF to get to this point. It's really just a shift in thinking (and recommending).
-Dan