Uploaded image for project: 'MyFaces Core'
  1. MyFaces Core
  2. MYFACES-2640

(JSF.js) Ajax Render component problem, replace with whole fragment not one element.

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Invalid
    • Affects Version/s: 2.0.0-beta-3
    • Fix Version/s: 2.0.1
    • Component/s: JSR-314
    • Labels:
      None
    • Environment:
      tomcat 6.0.20 java (mac os x )

      Description

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

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              puddlor Mark Li
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Time Tracking

                Estimated:
                Original Estimate - 4h
                4h
                Remaining:
                Remaining Estimate - 4h
                4h
                Logged:
                Time Spent - Not Specified
                Not Specified