[jsr-314-open-mirror] [jsr-314-open] [490-XmlViews] Namespace handling [Was: Chapter 11: The JSF XML View Syntax]
Blake Sullivan
blake.sullivan at oracle.com
Thu Oct 28 12:08:23 EDT 2010
I was thinking that this was an XHTML ResponseWriter thing. It's not
like the ResponseWriter doesn't know that nobody has output a prefix
mapping for XHTML yet (ignoring the case where it was sent out through
unescaped text and even then creating a new mapping isn't the end of the
world as long as it doesn't conflict).
We will eventually have a bigger problem that the ResponseWriter
interface allows no way to specify a namespace. This is lame and I'm
not a big fan of the workaround of abusing the default namespace or
passing the prefixes in with the element names.
-- Blake Sullivan
On 10/28/10 8:54 AM, Andy Schwartz wrote:
> (Tweaking the subject in case folks are tuning out of our very long
> prior discussion...)
>
> On 10/26/10 6:04 PM, Andy Schwartz wrote:
>> On 10/26/10 5:10 PM, Ed Burns wrote:
>>> Ok, here's what we'll do for JSF XML syntax.
>>>
>>> <f:view xmlns="http://www.w3.org/1999/xhtml"
>>> xmlns:f="http://java.sun.com/jsf/core"
>>> xmlns:h="http://java.sun.com/jsf/html">
>>> <html>
>>> <h:head><h:title>Title</h:title></h:head>
>>> <h:body>
>>>
>>> <h2>HTML elements ok</h2>
>>>
>>> </h:body>
>>> </html>
>>> </f:view>
>>
>>
>> While this is fine for cases where the page author wants to manually
>> insert an <f:view> tag, I still think that the fact that Facelets
>> does not require this is a nice perk.
>
> I somewhat randomly stumbled across another problem with the above
> approach: it doesn't work. :-(
>
> The problem: when the default xhtml namespace is specified on
> <f:view>, this namespace does not get passed down to the browser. As
> a result, the xhtml elements that the browser sees are not properly
> namespaced and the browser fails to handle these as xhtml elements.
>
> This is yet another case where there is ambiguity regarding the role
> of an XML construct - ie. a namespace specified in a Facelets document
> clearly applies to the document itself but could (and in this
> particular case should) also apply to the rendered content.
>
> Of course, the following approach works just fine:
>
>> <f:view xmlns:f="http://java.sun.com/jsf/core"
>> xmlns:h="http://java.sun.com/jsf/html">
>> <html xmlns="http://www.w3.org/1999/xhtml">
>
> In this case Facelets passes the default namespace through to the
> browser along with the <html> element.
>
> While this is a fine workaround, I am concerned that such dramatically
> different behavior in response to such a small/subtle difference in
> the view definition is bad for our end users.
>
> I don't know that this is a spec issue (other than making sure that
> the spec does not contain references to the above broken form), but
> thought this was worth raising here as this likely affects all
> JSF/Facelets implementations. I don't know the Faclets compiler code
> especially well, but I am wondering whether it could do some
> bookkeeping to detect/work around cases like this where default
> namespaces should in fact be propagated down to the browser. Or,
> alternatively, perhaps a solution could be implemented at the
> ResponseWriter level, though it might be better to catch/correct this
> sort of thing earlier (Facelets compilation time) rather than later
> (render response).
>
> Thoughts? Do folks think that I should log implementation bugs and/or
> a spec issue for this?
>
> Andy
>
More information about the jsr-314-open-mirror
mailing list