First off, hello. ;)
To introduce myself, name's Adam Winer: long standing member of the
JSF EG(actually, essentially the only member still standing from the
original JSF kickoff meeting), and currently the architect of Oracle's
ADF Faces.
I've been shown some problems lately with MyFaces 1.0.9 and ADF Faces.
The problems specifically trace to MyFaces's use of
ResponseWriter.endDocument() to output Javascript. Since ADF Faces
runs with its own RenderKit (and therefore its own ResponseWriter),
this Javascript is getting dropped and not written.
I'd recommend (both as JSF EG guy and ADF Faces guy) that this MyFaces
code be moved *out* of ResponseWriter.endDocument(). Specifically:
- ResponseWriter.endDocument() is not guaranteed to be called before
the close of <body> or even the close of <html>, and therefore this
script cannot be safely output at this point. It's quite likely that
changes in JSF 1.2 will essentially guarantee that endDocument() is
not called until the close of all output.
- This is not really the intent of ResponseWriter.endDocument(). In
HTML, it should be a no-op. It's there for more bizarre scenarios
like a ResponseWriter outputting a SOAP envelope around a response.
- It's breaking ADF Faces. :)
A significantly cleaner way to output needed Javascript is to add it
as needed from the Renderers that require it (using a request-scoped
attribute to track if its been added already).
BTW, glancing through the ResponseWriter code, some ideas for other
improvements:
- Refactor the ResponseWriter to use a separate instance for HTML and
XHTML (e.g, output <br> in HTML but <br/> in XHTML - take advantage of
this abstraction!)
- The line of code that reads:
String strValue = value.toString(); //TODO: Use converter for value
.. well, no: Converters are not applicable here.
- Remove any code that tries to output <!-- --> around Javascript, and
move that functionality into ResponseWriter.startElement("script") and
ResponseWriter.endElement("script") so it can be globally enabled and
disabled if needed.
Thanks,
Adam Winer
[EMAIL PROTECTED]