[ 
https://issues.apache.org/jira/browse/MYFACES-2637?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12852800#action_12852800
 ] 

Werner Punz commented on MYFACES-2637:
--------------------------------------

Ok I just got confirmation, the fix was valid in its own right, but introduced 
another bug aka broken multipart form handling.

The main problem we are dealing with here is that elements can become detached 
during a form or body replacement. The TCK then signalled an error.

This is mostly the same issue as we have had recently with detached elements 
being the source
of a jsf.ajax.request call (aka dojo dijit widgets for instance)

What we have to apply here is basically the same algorithm we did for the form 
determination regarding the request issueing code:

If only one form is present we are set,

If an element with the same id as the source can be recovered we are set and 
can determine its parent form.

If that cannot be found or is outside of a form try to locate an element with 
the same name, if only one can be found which is in a form voila, information 
enough to be sure that the form is most likely the one receiving the viewstate 
update

Otherwise nothing can be done and an error has to be raised.

Ok now this is a little bit more than I expected for the fix, I am eager to fix 
it, but if you guys don“t mind due to personal issues (aka family - work) I 
wont be able to fix it properly before next thursday or friday, I hope this 
does not hold anyone up.



> Serious Bug! ajax cant work using multiple forms.
> -------------------------------------------------
>
>                 Key: MYFACES-2637
>                 URL: https://issues.apache.org/jira/browse/MYFACES-2637
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-314
>    Affects Versions: 2.0.0-beta-3
>         Environment: tomcat 6.0.20, java 1.6 (mac osx)
>            Reporter: Mark Li
>            Priority: Blocker
>   Original Estimate: 3h
>  Remaining Estimate: 3h
>
> I am using multiple forms. the second form can submit  correctly first time, 
> but when you submit again, the ajax cant work. 
> you can try following code, first time the form f1 can reRend out1, but then 
> form f1 cant submit any more.
> test.jspx:
>       <h:head>
>       </h:head>
>       <h:body>
>               <h:outputScript name="jsf.js" library="javax.faces" 
> target="head"/>
>               
>               <h:form id="f0">
>               </h:form>               
>               <h:form id="f1">
>                       <h:inputText value="#{TestBean.value}"/>
>                       <h:outputText id="out1" value="#{TestBean.value}"/>
>                       <h:commandButton value="click me" 
> onclick="jsf.ajax.request(this,event,{execute:'@form', 
> render:'@form'});return false;"></h:commandButton>
>               </h:form>
> </h:body>
> The reason i find is that:
> during the first time submit and ajax rendering, the form will lose <input 
> type="hidden" id="javax.faces.ViewState"/> childnode. Then the following 
> submit will not work.
> the code in jsf.js causes this problem:
> jsf.js:
> myfaces._impl.xhrCore._AjaxResponse.prototype.processUpdate = function 
> (request, context, node) {
>         if (node.getAttribute("id") == "javax.faces.ViewState") {
>             sourceForm = document.forms.length > 0 ? document.forms[0] : null;
> ....
> }
> " sourceForm = document.forms.length > 0 ? document.forms[0] : null; " is 
> wrong!
> when there is multiple forms, it will always find the first one.
> Please change this, thx.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to