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

Werner Punz commented on MYFACES-2640:
--------------------------------------

Ok the findHtmlItem has a bug.

But back to the general problem I have to probably revert the behavior, to the 
recommendation of the expert group.
The reason simply is, that the spec clearly says, that the entire content has 
to be replaced, some fixup code is not really possible here.

The "update" element enables DOM elements matching the "id"
attribute to be updated with the contents of this element.
Page 438

<xsd:complexType name="partial-response-updateType">
<xsd:annotation>
<xsd:documentation>
The "update" element enables DOM elements matching the "id"
attribute to be updated with the contents of this element.
</xsd:documentation>

Which means the entire content not just cherry picking something.
So I have to revert it to the original behavior without find html element.
The issue with cherry picking the way you want it is also this will not work 
consitently over all browsers,
because you do not get a consistent eval behavior.

So my fix is, not to fix it but to put this into wontfix/invalid since the 
Expert Group is clear in this area as well as 
the spec, everything has to be updated!

So all I can for now say is adjust simply your code to something like

<div id="clientId">
  <input id="clientId:secondIdentifier">
</div>

and you are on the save side for all cases and the future




> (JSF.js) Ajax Render component problem, replace with whole fragment not one 
> element.
> ------------------------------------------------------------------------------------
>
>                 Key: MYFACES-2640
>                 URL: https://issues.apache.org/jira/browse/MYFACES-2640
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-314
>    Affects Versions: 2.0.0-beta-3
>         Environment: tomcat 6.0.20 java (mac os x )
>            Reporter: Mark Li
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> after ajax submit, jsf.js will re-render some element depending on 
> jsf.ajax.request({render:" some elements "});
> but this js code will cause some problem.
> jsf.js:
> myfaces._impl._util._Utils.replaceHtmlItem = function (request, context, 
> itemIdToReplace, newTag, form) {
> ......
>                     var fragment = range.createContextualFragment(newTag);
>                     evalNode = item.parentNode.replaceChild(fragment, item)
> .....
> }
> sometime fragment will has more than one childNodes, or the childNode not has 
> clientId, but the childNode of childNode has clientId.
> this will cause html unstable.
> Please fix it.
> this is my suggestion:
> myfaces._impl._util._Utils.replaceHtmlItem = function (request, context, 
> itemIdToReplace, newTag, form) {
>            .............
>               Orginal:
>                     var fragment = range.createContextualFragment(newTag);
>                     evalNode = item.parentNode.replaceChild(fragment, item)
>               fix:
>                     var fragment = range.createContextualFragment(newTag);
>                     var replaceItem = 
> myfaces._impl._util._Utils.findHtmlItemFromFragment(fragment, 
> itemIdToReplace);
>                     if(replaceItem == null)replaceItem = fragment;
>                     evalNode = item.parentNode.replaceChild(replaceItem, item)
>        ..................
> }
>     myfaces._impl._util._Utils.findHtmlItemFromFragment = function(fragment, 
> itemId){
>       if(fragment.childNodes == null)
>               return null;
>       for(var i = 0; i < fragment.childNodes.length ; i++ ){
>               var c = fragment.childNodes[i];
>               if(c.id == itemId)
>                       return c;
>       }
>       for(var i = 0; i < fragment.childNodes.length ; i++ ){
>               var c = fragment.childNodes[i];
>               var item = 
> myfaces._impl._util._Utils.findHtmlItemFromFragment(c, itemId);
>               if(item != null)
>                       return item;
>       }
>       return null;
>     };

-- 
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