You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Andrew Robinson (JIRA)" <de...@myfaces.apache.org> on 2006/04/10 17:24:59 UTC

[jira] Updated: (MYFACES-1276) Add new methods to HtmlFormBaseRenderer to ease integration support with AjaxAnywhere

     [ http://issues.apache.org/jira/browse/MYFACES-1276?page=all ]

Andrew Robinson updated MYFACES-1276:
-------------------------------------

    Status: Patch Available  (was: Open)

> Add new methods to HtmlFormBaseRenderer to ease integration support with AjaxAnywhere
> -------------------------------------------------------------------------------------
>
>          Key: MYFACES-1276
>          URL: http://issues.apache.org/jira/browse/MYFACES-1276
>      Project: MyFaces Core
>         Type: Improvement

>     Versions: 1.1.1
>     Reporter: Andrew Robinson
>      Fix For: 1.1.3-SNAPSHOT, 1.1.1

>
> One method of implementing AJAX is to re-render the page and only send
> pieces down to the browser. This is the way AjaxAnywhere works.
> However, it is not easy to get this to work in MyFaces with HTML
> forms. The issue:
> AJAX needs a way to identify HTML to replace on AJAX response. This is
> usually done via id:
> "document.getElementById('idFromAjaxResponse').innerHtml =
> reponseData".
> However, there is no containing HTML element for the "special" form
> elements. These "special" elements include:
> 1) input type="hidden" elements that are rendered for parameters,
> client-side state, etc.
> 2) script tag that contains the clear_[formid]() JavaScript function
> that uses the above hidden input elements
> In 1.1.1, these were placed at the top and bottom of the form. In
> 1.1.2/3 they are put only at the bottom, but in neither is the
> capability that I would like.
> Workaround I used: Extended the HtmlFormRenderer and buffered the
> output of the endcodeEnd and encodeBegin. Then I loop through the
> buffer and strip out all hidden input elements and JavaScript tags. I
> then add the stripped portion into a new SPAN element that is
> formatted for AjaxAnywhere to work.
> How this could have been much easier:
> Add 4 new methods to HtmlFormRendererBase:
> public void beforeFormElementsStart(FacesContext facesContext,
> UIComponent component)
>   throws IOException {}
> public void afterFormElementsStart(FacesContext facesContext,
> UIComponent component)
>   throws IOException {}
> public void beforeFormElementsEnd(FacesContext facesContext,
> UIComponent component)
>   throws IOException {}
> public void afterFormElementsEnd(FacesContext facesContext,
> UIComponent component)
>   throws IOException {}
> These methods would the be called:
> encodeBegin(...) {
> ...render the start tag...
> call before form elements start
> ...render and elements into the form
> call after form elements end
> ...
> encodeEnd(...) {
> call before form elements end
> ... render state, javascript etc. ...
> call after form elements end
> ... render the form end tag ...
> Then, with projects like AjaxAnywhere, users can extend
> HtmlFormRenderer and implement these methods. In these methods, we can
> write tags to contain this data that can be used in the AJAX code to
> update on every request.
> This would be a very simple change, would incur almost no overhead and
> give complete flexibility that would be needed to AJAX authors to have
> control over the special form behavior of JSF.
> I wouldn't care about the method names, in fact there could be one
> method with an enum argument that specifies before/after information.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira