I agree with removing the dummyform code from the
responsewriter.endDocument() method. I would say we could output the
dummy form whenever a UICommand stops being rendererd if it doesn't
have a parent form. We could check this with the component instance
we receive in the startElement() method. Just run up the tree to see
if a parent form exists, and render the dummy form as necessary.
On Mon, 28 Mar 2005 14:54:51 -0800, Adam Winer <[EMAIL PROTECTED]> wrote:
> 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]
>
--
-Heath Borders-Wing
[EMAIL PROTECTED]