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]

Reply via email to